I like that even your tests are aesthetically amazing. That being said, if you ever do run into performance issues, I find that judicious use of Coroutines to replace update functions works quite well.
Thanks! And nice meeting you at IndieCade! In retrospect, I'm surprised that more continuous movement games don't have this sort of undo system. It's very common in puzzle games with grid based movement.