Thank you. This was very helpful. I was able to find and fix my problems thanks to your comment.
The issues preventing the skeletons from matching were that
the rest transforms were different
the joints were ordered differently between skeletons
Notes
One of the test characters had a (valid) subset of the expected bones. Fixed by adding the missing bones.
Blender appears to be setting the rest position for the skeleton to the starting frame of the animation. This causes every exported animation to have a different restTransform. Fixed by correcting the rest transform after export.
Blender does not export joints in alphabetical order. The order depends on an internal representation. Which means that even if the hierarchies match in Blender's outliner, they may not match in the exported USD. Fixed by reordering joints and related data after export so they all match.
The rest pose and animations had the following joint order.
I'm hoping the Blender issues are user error on my part, but I could not find any way to change the joint export order.
Topic:
Spatial Computing
SubTopic:
Reality Composer Pro