The league leaders were on the back foot after Souza was dismissed eight minutes before the break, and Gremio duly took a 2-0 lead through Werley (58) and Hernan Barcos (61).
Nilton pulled one back in the 67th minute but Kleber sealed the victory six minutes later, ensuring Gremio moved to within six points of their opponents, who will slip from top spot should Botafogo take at least a point from their game in hand against Internacional.
Coritiba could have gone top with a win but they were held to a 1-1 draw by 10-man Portuguesa.
It could have been worse for the hosts, who fell behind to Gilberto's 58th-minute strike despite Pineiro's red card on the stroke of half-time, but Bill struck moments from the end to rescue a point.
Second-half goals from Pedro Oldoni (55), Vander (62) and Marquinhos (87) saw Vitoria rally for a 3-1 win over Ponte Preta.
William had struck in the 23rd minute for the visitors, who had Cesar sent off late on.
Leonardo Silva (19) and Alecsandro (56) scored to give Atletico Mineiro a 2-0 win over Bahia.
Goals in the first half from Joao Vitor (11), Marlon (32) and Leonardo (40) saw Criciuma overcome Nautico Recife 3-0.
Rafael Vaz struck a last-minute leveller to give Vasco da Gama a 1-1 draw at Santos, who had opened the scoring through Edu Dracena (77).
Goias and Flamengo drew 1-1, with goals from Walter (15) and Chicao (51) respectively, while Fluminense v Corinthians finished goalless.