Gilles, you don't mention it in your description but a key part of this is that the field in the abstract (super class) has to be private in order to see this - if it is public everything works fine.
You should look at the Java Doc for the reflection APIs we are using and you will see why calling getDeclaredFields is necessary.
I don't think your request for the Enum change is valid.
I am considering this issue resolved.
Thanks Gilles. We will not be using the change you made as it only accounts for one level of inheritance but I know how to fix it pretty easily. Please watch this issue so you can help me test the change when it gets checked in.