alright so I'm pretty tired and aren't too familiar with ruby but I'll give a shot as to something that might be going on (always good to practice debugging lol)
so from what I can tell, the battler's just not being refreshed properly through pbRefresh
so in that definition, the code checks to see if there's a sprite so that it doesn't get a null error, but when a Pokemon's fainted its sprite doesn't exist in the battle so the refresh isn't reached, meaning the HP bar or anything is never drawn for it
if this is the case (because like I said I'm not too familiar with this so I could be wrong) then it'll probably be an easy fix to add a line into the revive items' functions before pbRefresh to add the sprite back to the @sprites array using pbAddSprite so that it gets properly refreshed
regardless, I think your solution's probably fine as long as the player doesn't lose if their last pokemon is knocked out the turn the revive is used, since they'd technically have 0 pokemon before the end of the turn even though another is on its way, but that'd really be the only concern. It also doesn't let players revive a "sacrafice" mon in case they want the opponent to not target their last one, but that part's probably less of an issue.
Hope y'all can figure something out soon