Rigid body constraints not accurate between animated and dynamic objects

I’m having some trouble with rigid body constraints between animated and non-animated RB objects. I notice that if you have two dynamic RB objects constrained together, the sim works quite well and the constrained objects will “stick” to the empty defining the constraint. On the other hand if one RB is animated and constrained to a dynamic non-animated RB, the dynamic RB will only loosely follow the constraint’s location.

The image below shows what I mean. The sphere is an animated passive RB and the box is a dynamic RB. They’re joined with a Fixed constraint (the plain axes empty in green), and there is a sphere empty parented to the box with the same initial location as the constraint empty (orange empty). The constraint empty is parented to the sphere as a visual aid to show how closely the sphere and box are maintaining their initial relative positions throughout the animation.

The sphere is keyed to move down and as it does, the box moves away from the constraint’s initial location and the empties no longer line up.

The box is ~1 m long and the RBs get misaligned by ~9 cm at worst in this example. Something sliding around by 9% of its length seems pretty sloppy for a “fixed” constraint.

Is this a case of the animation system and rigid body sim not working well together? Is this some known limitation of the RB sim and are there any typical workarounds?

I have the RB sim at 250 steps per second and iterations turned up to 40. At the max settings, the constraint inaccuracy is reduced to ~3 cm which still seems high.

I’m trying to work with some character models that have their hair controlled by chains of rigid bodies constrained to a (passive, animated) head collision mesh. A similar setup is used in this video (https://youtu.be/A5tEGvRjJO8?t=156) and seems to work fine, so I’m at a loss.

Blend file attached. Layer 1 has this RB setup with all dynamic objects for comparison and layer 2 has the animated sphere.
PhysTests2.blend (584 KB)

I did some more tests and noticed that the misalignment is reduced at higher frame rates and slower animated object speeds. This happens regardless of the scene’s FPS settings. Like, I could have an object move 1 meter in 30 frames @ 30 fps, or move 1 meter in 60 frames @ 60 fps, and the 60 fps version will work better, even though in both cases the object is moving at 1 m/s. Does Bullet have some kind of internal frame rate independent of the render FPS? Is this documented anywhere?
I know it has its own unit system independent of the scene unit settings. 1 BU is always treated as 1 meter for RB physics; the scene units seem to be cosmetic only.