See rP24956. Unfortunately, if FinishOrder() is called without an FSM function somewhere in the stack, its SetNextState("Idle") call does nothing, and units can end up in broken state (see https://wildfiregames.com/forum/topic/36862-error!/ ).
I think the simplest fix at the moment is to replace "REJECT_ORDER and FinishOrder" with just calling FinishOrder, since orders are processed inside the FSM.
The weird thing is that this.order is set to the new order even if it's going to get rejected - Possibly it makes more sense to not do that, just read the msg parameter, and if accept the order then push the order on the stack, but that also sounds trickier.