I had similar problems to yours with the ball code in Aerial Antics. They've all been fixed in the new version. I had problems when I would translate the ball and not directly before doing so record it's old position and then directly after record it's new position. I worked off of Sswift's code and use this basically. This is from my Splash Screen which reacts the same everytime.
num_splash_collisions=CountCollisions(sde\h_andle)
If num_splash_collisions=0
sde\vx#=sde\curr_x#-sde\old_x#
sde\vz#=sde\curr_z#-sde\old_z#
sde\velocity#=Sqr(sde\vx#^2+sde\vy#^2+sde\vz#^2)
sde\old_x#=sde\curr_x#
sde\old_y#=sde\curr_y#
sde\old_z#=sde\curr_z#
If sde\velocity#>0
sde\dx# = sde\vx# / sde\velocity#
sde\dy# = sde\vy# / sde\velocity#
sde\dz# = sde\vz# / sde\velocity#
sde\air_friction_force#=splash_air_friction# * sde\velocity#^2
sde\velocity#=sde\velocity-sde\air_friction_force#
sde\vx# = sde\dx# * sde\velocity#
sde\vy# = sde\dy# * sde\velocity#
sde\vz# = sde\dz# * sde\velocity#
EndIf
sde\vy#=sde\vy#-splash_gravity#
TranslateEntity sde\h_andle,sde\vx#,sde\vy#,sde\vz#
sde\curr_x#=EntityX#(sde\h_andle)
sde\curr_y#=EntityY#(sde\h_andle)
sde\curr_z#=EntityZ#(sde\h_andle)
Mx# = (sde\curr_x# - sde\old_x#)
Mz# = (sde\curr_z# - sde\old_z#)
; Rotate the entity the right amount for it's radius and the distance it has moved along the X and Z axis.
; This is kinda a hack and only designed for rolling on planes but you won't notice the diffrence.
XAngleAdjust# = (Mx# / (MeshWidth(sde\h_andle)/2)) * (180.0/Pi)
ZAngleAdjust# = (Mz# / (MeshWidth(sde\h_andle)/2)) * (180.0/Pi)
TurnEntity sde\h_andle,ZAngleAdjust#,0,-XAngleAdjust#,True
Else
If sde\velocity#>0
splash_hit=CollisionEntity(sde\h_andle,num_splash_collisions)
If sde\velocity#>.1
; Rotate the entity the right amount for it's radius and the distance it has moved along the X and Z axis.
; This is kinda a hack and only designed for rolling on planes but you won't notice the diffrence.
XAngleAdjust# = (Mx# / (MeshWidth(sde\h_andle)/2)) * (180.0/Pi)
ZAngleAdjust# = (Mz# / (MeshWidth(sde\h_andle)/2)) * (180.0/Pi)
TurnEntity sde\h_andle,ZAngleAdjust#,0,-XAngleAdjust#,True
EndIf
For i=1 To CountCollisions(sde\h_andle)
If sde\vy#<-.1 And ChannelPlaying(kick_ball_chan)=0
kick_ball_chan=EmitSound(kick_ball,sde\h_andle)
Exit
EndIf
Next
;Get the normal of the surface which the entity collided with.
Nx# = CollisionNX#(sde\h_andle, num_splash_collisions)
Ny# = CollisionNY#(sde\h_andle, num_splash_collisions)
Nz# = CollisionNZ#(sde\h_andle, num_splash_collisions)
If CollisionNY#(sde\h_andle,num_splash_collisions)<1
sde\vy#=sde\vy#-splash_gravity#
EndIf
; Compute the dot product of the entity's motion vector and the normal of the surface collided with.
VdotN# = sde\vx# * Nx# + sde\vy#*Ny# + sde\vz#*Nz#
; Calculate the normal force.
NFx# = -2.0 * Nx# * VdotN#
NFy# = -2.0 * Ny# * VdotN#
NFz# = -2.0 * Nz# * VdotN#
; Add the normal force to the direction vector.
sde\vx# = sde\vx# + NFx#
sde\vy# = sde\vy# + NFy#
sde\vz# = sde\vz# + NFz#
sde\dx# = sde\vx# / sde\velocity#
sde\dy# = sde\vy# / sde\velocity#
sde\dz# = sde\vz# / sde\velocity#
sde\velocity#=sde\velocity#-(splash_ball_ground_friction#)
sde\vx# = sde\dx# * sde\velocity#
sde\vy# = sde\dy# * sde\velocity#
sde\vz# = sde\dz# * sde\velocity#
If sde\vy#<=.005 And CollisionNY#(sde\h_andle,num_splash_collisions)=1
sde\vy#=0
sde\old_y#=sde\curr_y#
EndIf
If sde\velocity#<.1 And sde\vy#<=.005
sde\velocity#=0
sde\vx#=0
sde\vy#=0
sde\vz#=0
sde\dx=0
sde\dy#=0
sde\dz#=0
PositionEntity(sde\h_andle,EntityX#(sde\h_andle),1,EntityZ#(sde\h_andle))
sde\curr_x#=EntityX#(sde\h_andle)
sde\curr_y#=EntityY#(sde\h_andle)
sde\curr_z#=EntityZ#(sde\h_andle)
sde\old_x#=sde\curr_x#
sde\old_y#=sde\curr_y#
sde\old_z#=sde\curr_z#
EndIf
EndIf
EndIf
UpdateWorld
Next
RenderWorld tween#