Mine was set up very similar! but I moved the parent, and rotated/offset the child on certain surfaces.
Think I used pixels per unit = 10 on everything, that gave 0.1 world space per pixel. I should have used per unit = 1 thinking about it... -_- much easier to round everything to an integer than to 0.1 ,':/
When moving the slug pixel by pixel, I didn't use a force to move, I used transform.position to move by a pixel (0.1) in whatever direction. Only the jump used 2Drigidboyd forces, then when the collision happened i'd snap back to nearest pixel, and move using transform.position again.
honestly if i'd have used pixel per unit = 1 I may have been able to use your code and simplify my problems a lot..