Quick answer: Pygame collide_mask using the unrotated mask after sprite rotation? Mask is built at construction; rotation doesn't update the mask - rebuild after rotate.

Rotated sprite's mask collides with original orientation, not rotated.

Rebuild mask post-rotate

After pygame.transform.rotate, regenerate the mask from the rotated image.

Or pre-rotate masks

For known rotation angles, pre-build masks per angle. Lookup; no per-rotation cost.

Use bounding circle

For frequently-rotated objects, circle collision; rotation-agnostic.

“Masks are per-image. Rotation creates new images.”

If your game rotates sprites, the mask rebuild discipline is mandatory.

Related reading