Rovers and Millwall were heading for a point apiece after David Jones' freak goal had cancelled out Karleigh Osborne's first-half opener for the hosts.
But with 12 minutes to go referee Gavin Ward adjudged Danny Shittu had tripped Grant Hanley inside the penalty area.
Millwall protested long and hard, claiming Hanley had dived, but Rhodes kept his nerve to tuck in his 27th goal of the season.
Lions skipper Shittu continued his protest after the final whistle and was shown a second yellow card followed by a red by referee Ward.
It meant Rovers leapfrogged Millwall into 15th spot, five points above the relegation zone with two matches left.
Millwall needed a victory to be certain of avoiding the drop themselves but they should be fine - in a ridiculously tight division three points would have still kept them in with a chance of reaching the play-offs.
They led through defender Osborne's first goal for the club but should have been further ahead by the time Rovers levelled.
Jack Smith and James Henry had already seen efforts fly just wide before Millwall Osborne struck in the 14th minute.
Hanley was booked for lunging in at Liam Feeney and, from the free-kick, Henry found the head of Mark Beevers at the far post.
Beevers' header back across goal was blocked but it fell to Osborne, who swivelled like a striker before lashing the ball into the net from eight yards.
Henry almost added a second from another free-kick but this time Grzegorz Sandomierski tipped his curling shot over the crossbar.
Sandomierski also kept out Feeney's deflected shot and Rob Hulse headed wide with the Lions well on top.
Rovers lost striker Colin Kazim-Richards to injury early on and barely threatened until the final 10 minutes of the first half.
Then David Dunn made space for himself with a clever diagonal run to the edge of the penalty area, only to slice his shot high and wide.
In stoppage time a fierce 25-yard drive from Jones was heading for the top corner until Lions goalkeeper David Forde got a fingertip on it to make a superb save.
But the equaliser came in the 56th minute when Jones swung a corner towards the near post which squirmed past Rob Hulse and into the net, leaving the on-loan QPR striker with his head in his hands.
Forde made another good save from Dunn but was furious when referee Ward pointed to the spot in the 78th minute.
Both he and Shittu were booked for their protests before Rhodes sent Forde the wrong way.
Osborne could have snatched a dramatic equaliser in stoppage time but his shot was kept out by the legs of Sandomierski as Rovers held out for a crucial win.