There is no logical way to defend that a random player not set in the depth chart gets picked to replace a player who is set at that position in the depth chart. None.
There are several, but of course many of them are either unsatisfactory to some users or inavoidable. For example:
1. The player is fouled out or ejected. Obviously, someone has to replace him unless you play a four man lineup.
2. The player is injured. See above.
3. You have a huge lead and the game is far from contested, and the coach prefers to minimize the injury risk of the starters.
4. The player is so exhausted that he's literally dead weight on the court.
The thing is, I don't agree that SFDC is bugged, because Marin and Charles and Forrest before him were all forthright that the other substitution options *are* bugged. I still think a major overhaul of the whole sub system is really needed, but of course where that fits on the priority queue for each of us is probably going to be quite different.