The issue here is that your animations are changing size. Check out my comment here for a more in-depth explanation and some sample code on how to fix it:
@Milo I think your animations are the culprit:
Because you have animations that change size each frame, you might want to try creating a hidden “body sprite” that you use for all of your physics and a second “display sprite” that just animates.
Here’s some example code demonstrating what I mean:
The sprite on the left is actually two sprites; one is running an animation that changes size each frame and the other doesn’t animate at all. We do all of the physics/controls/overlaps etc. on the …