It seems that the program does not fully support the proper sequence of route clearing, when there are a lot of blocks.
Normally, with a mouse, I clear a route into single line section by first selecting the starting block and then the
next available block into the direction of the route (that way I don't have to whisk the cursor across the screen). Doing this will eventually clear all the blocks into the direction of movement, but this happens slowly and may take several seconds when running in 1:1 time scale. If there are a number of blocks between the two locations, it is possible to clear opposing routes.
The above two examples are not trickery. The route becomes cleared block-by-block, and there is ample time to set opposing routes. In real life, this would not be possible since the signal systems will not allow it to happen: when a route command is sent, all opposing routes become blocked before any route is allowed to clear.
Also,
when two trains are following one another, the blocks ahead of the second train will not clear immediately after the first train has left them, and in this case it is possible that an opposing stored route gets cleared before the block is cleared for the second train, and two trains are heading towards one another, head-to-head. The simple fix is to specify that any route already set should always take precedence over stored routes.
So if you could rectify the situation by preventing the possibility of opposing commands into a line with a number of blocks. The simplest of ways is to clear the route immediately (in one 'swoop') up to the next visible signal.
(In TD3 it is possible to clear routes this way, too. You would select two opposing signals when setting an entrance-exit route. TD3 cleared the full available route immediately.)