OK, I think I fixed my problem. Here's what I did...
My game has a set number of zoom levels (i.e. 2x, 4x, 8x, etc) so what I did was the following...
TYPE XY
x as integer
y as integer
ENDTYPE
TYPE SP_TABLE_TYPE
num as integer
img as integer
zoom2 as XY
zoom4 as XY
zoom8 as XY
ENDTYPE
dim sprite_table(255) as SP_TABLE_TYPE
Every time a sprite is created, I call a function that calculates the posits of that particular sprite for all zoom levels. As this calculation is only done once, it eliminates the rounding error I was experiencing before. The zoom function simply re-posits the sprite by referencing the zoom level (i.e. sprite sprite_table(z).num, sprite_table(z).zoom2.x, sprite_table(z).zoom2.y, sprite_table(z).img )
I imagine there is a more elegant solution, but I decided that this brute force method would suffice as my project is old school style gfx, etc.
--Chromehawk