I think it very likely you're seeing the effects of repeatedly rounding to integer values.

Incidentally, there's a way of carrying out the rotation that doesn't involve taking those inverse trig functions (another possible source of rounding errors). A rotation of T round the origin can be expressed as a matrix (cos T, - sin T; sin T, cos T) expressing coordinates in row form, so that (x,y)(a,b;c,d) = (ax+cy, bx+dy). A rotation about the point (x0,y0) can be expressed as (x,y) -> (x-x0,y-y0)(a,b;c,d) + (x0,y0). You might find this faster and more accurate.