I think the best option is this:
Each sprite is related to a specific plan that describes its overall movement throughout the cutscene. If this gets too messy on a playing map, you could always create a copy of the map just for the cutscene.
Each plan contains code to control the sprite related to it. To start a sprite moving immediately, just use the PushSpriteTowardCoordinate. To make a sprite move until it reaches the point, use something similar to CheckNextCoordinate, but it doesn't need to actually set the next coordinate. It can just return true if it's within range. Then, if it is, set a map flag that tells all the plans that this sprite is where it needs to be. The plan itself can check any flag to start or stop moving, or do anything it wants.
The sprite itself should control all of the state switching. Depending on the direction it's moving (its dx and dy) switch it to the correct state, and if it's dx or dy is large enough, switch to the running state, etc. The plan would take care of special cases like crouching or firing, etc., and it might want to let the sprite know to stop trying to switch states on its own with a sprite parameter.