Whew! Lot of answers! The most promising ones seem to be the ones relating to binding - binding is stuff I just plain don't understand. The possibility that it's making some kind of copy of the type seems like it might be on the money.
Just to clarify:
I'm not using const - I'm using readonly. According to Richter, const gets compiled into your code, as you'd expect. But readonly is a regular ol' variable that is protected by the compiler and runtime.
It's not a property; it really is a field.
The field is static, so SetField should not take the owner (there isn't one anyway), it should take null. This is from MSDN.
I can't use different build-time dependent values because in the unit tests I test it with different caps in the same run.