So after some investigation the main issue I see with getting rid of "fix" entirely (and replacing them with true doubles) is in the sprite movement code. Sprites currently have step sizes that are fractions of the tile width, and due to rounding errors replacing the fixed-point position variables with floating point will alter the movement behavior.

But I don't think that's actually a major issue, since sprites can store their positions in units of pixels instead of tiles; current movement code will only increment the position by integer number of pixels and since sufficiently small integers are exactly represented in floating-point, as long as the calculation of pixel->tile is rounded carefully there should be no functional change in the movement behavior.