Q3 also makes a copy, but has explicit rentity_t types with all the stuff used by only the renderer. a bit better for threading the renderer that way, I suppose.
the client should not be drilling down to poses, poking the model file randomly like that will hurt cache - save that for the bit of code which will read the pointers to the data too (or vbo indexes... same thing, kinda). you also have the issue of potentially stale pointers to renderer-owned data within the client. especially if it points to a different model.
the other possibility is putting the interpolation in the client. fully. including vertex blending (if you don't have glsl).
this is quite relevent with skeletal model formats, where you're blending bones with many influences. with ragdoll you even need to bypass frames entirely. With glsl you might want to deal with those bones and animate the verticies themselves in glsl.
I'd say ragdoll should be part of the client, purely from the 'pure' perspective in that the only data you should read back from the renderer is constant stuff in the form of model data.
In fte, I support passing bone data to the renderer (in the form of a bonecount+bone pointer), which overrides any frame numbers. For skeletal models, if there's no bone pointer passed in then it does an implicit internal 'skel_build' call using the frame info passed in. Yes, you can call skel_build on other models than the one that's to be drawn, thereby importing frames from animation-only models like md5anim.
Whether you have some generic 'PrepForRendering'/'AddEntity' call or directly write/reuse raw entities and have the renderer do it doesn't really matter too much. The pain comes in freeing any such temporary bone memory.
All I really care about is that you don't cache anything in it for longer than a frame.

I hope baker doesn't mind that this isn't really about timing any more. :s