ok, resolved, it appears I had a very small typeo in the dropdown button's ng-if expression, which caused it to always show "None" instead of the selected item from the list. This led me to think that the selection in the form did not propagate to the model..
anyway, here's my working codepen - I'm using the form field controller's setViewModel to push a value from the dropdown to the hidden input field, and angular takes care of pushing it down to the model while making the form dirty:
form.groupId.$setViewValue(group.id);
Anyway, it seems like the most elegant way (I could find) to do this (except maybe using a directive to compeltely replace the select input..)
Hope this helps!