I'd say the topology is good enough, so I wanted to use the auto-weights feature to get a quick "draft" for the weights. I know this feature can be a bit rough sometimes, but what I'm seeing in this case is way worse than what I'm used to:
As you can see here, after parenting with auto-weights, the arm deforms both the head and the upper body. You can also see the generated weights for the left leg, which seem to be even higher for the right side than the left side.
I'm thinking there may be something fundamentally wrong with either my topology or my approach. Is such a bad auto-weighting normal for Blender? I certainly remember it performing way better in my previous attempts.
I thought this may be due to a low poly count, so I've tried subdividing the mesh (2x) and applying the modifier. No luck so far.