You’re right. This was a bug, and it has now been fixed.
Enumerations declared inside a class are scoped to that class. It is valid for both CustomTextField and CustomCheckBox to define their own Position enumeration. Within each class, the short name Position should resolve to that class’s enumeration. Outside the class, the qualified names CustomTextField.Position and CustomCheckBox.Position can be used.
The compiler and Studio were incorrectly allowing one nested enumeration’s short name to collide with the other, so the result could depend on source ordering. The fix covers type checking, compiled default values, Studio completions, and property-editor suggestions.
This will be included in the next release: Nested enumerations with the same name no longer collide between classes.
Thanks for reporting it.