Hook CHalfLifeMultiplay::CheckWinConditions and check the number of alive players, excluding the ones who are supposed to be dead, then force the round to end. To finish the round, you'll need TerminateRound, you won't even need to hook that with orpheu, it can be implemented in amxx, it's just three lines.
If using regamedll and reapi, there is RG_CSGameRules_CheckWinConditions and rg_round_end native.
There are two alternatives I can think of right now if you're not able to use orpheu at all to get the signature for CheckWinConditions.
You will do that same check
but on Ham_Killed and client_remove, this may fail if you transfer a player from his team without actually killing him.
The other is to either set a loop task or create an entity and there do that check. To check if the round is not already ending you can use m_bRoundTerminating.
To show the player as dead in the scoreboard, hook ScoreAttrib and set the flag (1<<0), you don't need DEAD_DEAD.
There is also this plugin which does exactly what you are trying, you may want to check it. https://forums.alliedmods.net/showth...1851?p=1441851