Yes, I tried smart objects - the transform box shows that it moves half a pixel, but the moment you actually try to do anything (e.g. rasterize, merge or flatten the image) the layer hops to the nearest pixel. It's the same thing with vector shapes - you can move a path in fractional pixel increments, but once it's rasterized, it can only be translated in whole-pixel increments.
I've come to the conclusion that this is a permanent feature of Photoshop - all raster layers are locked to the pixel grid. I guess it's logical really - otherwise you would get image degradation every time you moved a layer. Obviously this is still going to happen if you rotate or scale, but this feature ensures that translation is lossless on its own.
So I'm using the scale-up/scale-down method - at 500% as I want 0.2 pixel accuracy. This pushes my processing time from less than a second per frame to 7 or 8 seconds - which is quite significant on 35,000 images - but I can always run it at night!