You are pushing the actor in different directions and these actions add up to the velocity making less predictable. You should set the velocity directly instead, or at least reset the velocity to zero before applying a new force.
By the way, if you want to push an object to the right then xDir should be 1.0 and yDir should be 0.0.
Right: xDir = 1.0 yDir = 0.0
Left: xDir = -1.0 yDir = 0.0
Up: xDir = 0.0 yDir = -1.0
Down: xDir = 0.0 yDir = 1.0
Up-Right: xDir = 1.0 yDir = -1.0