Just skimmed, but isn't collision detection in sprite hw usually incorporated in the overlay logic instead of just checking coordinates? If you have round sprites you don't want them to collide as rectangular shapes. The logic of collisions at the pixel level is more intuitive as well.
Did you look at the sprite implementation in the various C64 and Amiga FPGA re-implementations? I haven't, I'm a bit curious on how they do the pixel merging (the trivial implementation I think is a prioritized 1-8 mux controlled by some priority selection logic)