Ok, that helps. Thank you.
It is unfortunate, because this is really an implementation detail which gets exposed to the abstraction. I'd argue that ng-switch and ng-if should solve this problem a different way to avoid creating child scopes. It would allow for a cleaner abstraction IMO. That will never happen, however. It would break existing code.
Soooo... I'm glad I know WHY it works this way. Now I can either program against it (defensively) by referencing fields on objects, or know that it an issue and use ng-show or $parent.field.
Thanks,
Brian