@undingen : probably there is no solution except to modify numpy to get rid of UPDATEIFCOPY. there's no intrinsic reason it has to be done the way it is, and in fact it'd probably make some of the code clearer and less magical, but finding and cleaning all that stuff up may take some work.
:-( but thanks for your expert opinion. We are still thinking about switching to ref counting so this issue may get resolved. I'm sadly not having time to change the numpy implementation at the moment.
I will poke the pypy folks also, they are also currently trying to get their C-API to run numpy and will surely run into the same problem very soon, maybe they will be inspired to do something about it :-)