Since I removed most of the special turn animations, I went back to the regular way of turning the character: it’s just rotated in code. The problem was that the run animation gave it forward movement, which was still happening while in the middle of turning.
The fix is simple: I minimize any position change while the 180 degree turn was occurring.
It detects a 180 degree turn by checking a threshold, so this doesn’t matter if the user input is forward-to-backward, left-to-right, or even diagonals. It should work the same.