Seems the mesh needs to have the same Skeleton to be properly shared, which makes sense in hind-sight... an object that contains a sub-set of the bones (like a piece of armor) can't just be shared with the main entity's skeleton, since there's no way to know which bones the armor piece should animate with on the main body. Neither the name or handle are good for matching the two. The armor/part meshes need to be given the same skeleton.void Ogre::Entity::shareSkeletonInstanceWith(Entity *entity)
Shares the SkeletonInstance with the supplied entity.
Note that in order for this to work, both entities must have the same Skeleton.
This would mean that attachObjectToBone would be superior for unskinned meshes (or meshes that are completely weighted to a single bone) since there's no need to muck about with matching skeletons. Just attach to the named bone and off it goes.
For skinned meshes, though, this would mean a tiny bit of extra work. Each skinned mesh that can be attached to an NPC would need to be created twice, once using the normal skeleton and again for the beast skeleton. What I'd imagine here is: when a skinned NPC part mesh is needed, it would load the NIF mesh(es) according to whether it's a beast or non-beast NPC (with the mesh name having an identifier appended to it to differentiate the two). Then after the mesh is created, it's given the skeleton name accordingly.
After that, when the mesh(es) are loaded it will automatically build bone assignments using the appropriate handles given the bone names in the nif's skindata, for it to be shared with the main entity.
Luckily the overhead here will be relatively small, since the actual mesh data is loaded as needed and can be removed automatically when it's no longer being used by anything in the scene. Only one copy of the mesh would need to be loaded unless both beast and non-beast versions are used in the same scene, otherwise Ogre will unload unused meshes when the resource size limit is exceeded. And even then, it's only the vertex data... the textures, materials, and shaders will be shared.