Nope. It uses natives because movespeed abilities dont stack, so it would require a huge movespeed ability with shitloads of levels, which would be a bitch to load and which would consume shameless amount of filesize or sumthing like that.
So, just add some debug msgs to you UnitModifyMoveSpeed and see if it is called in some place it should not be.
edit. Actually, Cassiel. Why you even use R2I here?
set p.MoveSpeed = p.MoveSpeed + R2I(amount) // ?
call SetUnitMoveSpeed(u, p.MoveSpeed)
edit2. And yea, make sure that nothing else affects movespeed, other than those UnitProperties functions.
GetUnitMoveSpeed (unit) should equal to UnitGetMoveSpeed(unit)