A few mistakes were revealed when testing using a real application; 
1) I'd forgotten to hook up the classFor: method to the proxy creation methods, so it was never actually used...
2) Since copyFrom: is just a pseudo-forwardBecome:, we need to explicitly replace existing references to the value returned by selectOne: ... 
I hope the repository cache is the only place it is stored during selectOne:, if there are more, additional fixup post copyFrom: in becomeForwardWithSameShape: is needed.

The attached version should fix the above two issues.

Cheers,
Henry