Someone else said it as well but during Garbage time the game engine wants to place backups, not reserves. I think based on the way the lineup actually played out the order of operations in the code must be something like this:
1: Move backups into the game.
2: If the same player is set at two positions, move a reserve into one of the two positions instead, if possible.
3: If a starter is still on the floor, place the reserve in his position.
4: If no reserve is available at that position, choose a random player who is not currently on the floor to take his place, and prioritize players who were not in the starting lineup.
So with step 1 we get:
McKenna
McKenna
Sibang
Sibang
Relinque
But since McKenna and Sibang are playing 2 positions, it pulls in a reserve at one of their spots:
Lipp
McKenna
Sibang
Washbrook
Relinque
And here we get to step 3, which is where our problem arises. There's a starter still on the floor.
The game tries to put his reserve in place, but McKenna is already playing!
So the game runs out of options at Center and we get to step 4: fill any remaining blank position with a random player from the bench. And since Munoz is the only player on the bench who didn't start the game, he moves into the empty spot.
Now, a human could pretty easily look at the lineup and see that there's an arrangement of players that would have worked, but computers can't work things like that out so easily. They can only complete steps in the order they're told.
I think that this problem in this particular case might have been fixed if step 2 and 3 were reversed (so remove starters first, and THEN pull in reserves) but it's also possible that doing that would create a different problem in the substitution pattern. Until the BBs can work out everything like that, it's best to just remember that garbage time will first and foremost honor the positions you assign as backups.