I matched the float's and int's in several tests in dbp and .net, and it didn't change the behavior. I looked at the dgdk c++ code from google to see if it was something like type casts. (havent been able to setup a debug enviro for that code base yet, so I just browsed) I was wondering if it's in the sin and cos function becuase it only seems to happen in certain quads. However, its using dx3d to convert to radians, then microsoft's standard sin/cos routines, and then the compilers type casts. so ... ehh, I changed my code to refelct a minimum velocity of 2.
From the google code base, under the CSpriteC Move() function:
// move sprite by angle and velocity
m_ptr->fX += (float)(sin(D3DXToRadian(m_ptr->fAngle)) * velocity);
m_ptr->fY -= (float)(cos(D3DXToRadian(m_ptr->fAngle)) * velocity);