The visitors had Kyle Bartley sent off after only seven minutes but still took the lead when Gylfi Sigurdsson struck a stunning opener three minutes later.
But Rovers drew level within two minutes through Chris Taylor and sub Rudy Gestede put the home side in front 12 minutes later.
Craig Conway made it 3-1 in the 89th minute before Sigurdsson was sent off for a reckless lunge on Taylor in injury time.
There was another surprise at St Mary’s, where Marouane Chamakh scored twice to continue Alan Pardew’s winning run, with Crystal Palace edging out Southampton 3-2.
All five goals came in a breathless first 39 minutes, with Graziano Pelle putting Saints in front on nine minutes before Chamakh equalised two minutes later.
A Scott Dann own-goal restored the hosts’ advantage but Yaya Sanogo’s deflected effort equalised for the Eagles and Chamakh got his second six minutes before the break.
Two goals from Victor Anichebe helped West Brom survive a tricky test against Midlands rivals Birmingham at St Andrew’s. The Baggies made the most of a sloppy start from the hosts with Anichebe hitting the opener on 25 minutes and notching his second 10 minutes later.
But the Blues rallied and made a game of it after Jonathan Grounds reduced the deficit with a low shot off the post in first-half injury time.
Darren Bent headed the opener on his full debut as Derby beat neighbours Chesterfield 2-0, Will Hughes completing a hard-earned victory for the Championship side with eight minutes to go.
Substitute Hal Robson-Kanu grabbed a fifth-round place for Reading as the Royals came from behind to beat Cardiff 2-1 in south Wales.
Kenwyne Jones’s 25th-minute header put the Bluebirds in front before Oliver Norwood equalised and Robson-Kanu pounced to win it two minutes from time.
Preston and Sheffield United must do it all again after a 1-1 draw at Deepdale, Paul Gallagher putting the hosts in front before Diego De Girolamo equalised midway through the second half.