I think that's weirdooo....... but dude There's no wrong using SetUnitPosition why you're keeping yourself using SetUnitX/Y? SetUnitX/Y uses coordinates and they do not disrupt orders of the unit, The SetUnitPosition sets the unit location and disrupting them like pausing them when they move. I think you can use SetUnitPosition because your dummy ball do not have taken any orders and it is working as you said when you used it so stick with that function dude but you have to remove leaks
)... Anyway you have leaks when you using coordinates because you're making them location instead of real dude :/ your doing like this.
JASS:
set someRealX = GetUnitX(unit)
set someRealY = GetUnitY(unit)
set loc = Location(someRealX,someRealY)
don't do that you must not turn them to location. you MUST do it like this
JASS:
set someRealX = GetUnitX(unit)
set someRealY = GetUnitY(unit)
set unit = CreateUnit(player,'u000',someRealX,someRealY,0.)
And I think the CheckWalkability is the problem dude..