I 'solved' the issue by using the built in *LookAt(..)
methods for getting and setting:
Vec3d eye, focus, up;
fCam->getViewMatrixAsLookAt( eye, focus, up );
eye = eye - focus;
eye.normalize();
viewCam->setViewMatrixAsLookAt( eye * 4.0, Vec3d(), up );
I can't see what the difference between my 'manual' code and these convenience methods is. I thought OSG may be performing some extra transformation later in the render pipeline, but I couldn't find anything in it's source code.