Goals from Danny Graham and Wes Brown saw the home side twice come from behind, cancelling out earlier strikes from Dominic Samuel and Liam Moore.
But with Rovers pressing for a winner they were caught on the break in time added on as Garath McCleary squared for George Evans to find the bottom corner of the net to clinch all three points for the Royals.
In what was an even start to the match Jason Lowe was first to test keeper Ali Al Habsi with a swerving seventh minute shot that had to be palmed away.
But the visitors soon threatened themselves as Jason Steele had to pull off an impressive one-handed save to keep out a shot from McCleary.
The Reading man would then turn provider for the opener on 32 minutes as he threaded a ball into the channels for Samuel to chase, and the striker surprised everyone when he slamed home a right-footed effort past Steele at his near post.
Rovers went back on the attack, Graham with a header that didn't trouble Al Habsi, before Marvin Emnes clipped the crossbar after Graham had nodded down.
The home side continued to push the opposition back, Sam Gallagher saw his shot saved before Moore denied Emnes on the line on the follow-up.
Thankfully the resulting corner would see Rovers claim the equaliser their play deserved. Craig Conway's centre was flicked on by Darragh Lenihan and Graham fired home his eighth goal this season to ensure the scores were level at the break.
The start of the second half saw Rovers continue to pose more of a threat in the attacking third. A Derrick Williams cross picked out Graham, but he headed straight at Al Habsi. Anywhere else and it was a certain goal.
Moments later Ben Marshall sent over a cross from the right, this time it was Emnes attacking the ball, but he couldn't claim a clean connection and the chance was gone.
But despite the bright play from the home side, they were caught out once more as Reading regained the lead from a goal out of nothing on the hour mark.
Liam Kelly let fly from distance and as the ball crashed down off the crossbar, defender Liam Moore raced in unopposed to force it over the line.
Back came Rovers, Darragh Lenihan with a header cleared from inside the six-yard box, Gallagher with a shot that deflected wide.
Then after collecting a pass inside from Marshall, Graham grazed the outside of the post with a shot from just inside the box.
Awarded a corner, Conway delivered once more, and Brown arrived to power his header into the back of the net to mark his league debut with a goal.
Rovers continued to press as they looked for a winner, but with the clock ticking down they were caught on the break two minutes into time added on at the end of the game.
As Chris Gunter sent a long throw down the line, McCleary got the better of Brown on the right before racing into the area and squaring for Evans who curled the ball into the back of the net.
It was despair for Rovers to go behind a third time, and they couldn't furnish a final chance to rescue something from the game. Defeat ensures they remain in the bottom three at Christmas.
ROVERS: Steele, Marshall, Brown, Lenihan, Williams, Lowe (c), Akpan (sub Nyambe 86 mins), Conway, Gallagher, Emnes, Graham.
Subs not used: Raya (GK), Feeney, Byrne, Stokes, Bennett, Wharton.
Goals: Graham 44 mins, Brown 73 mins,
Booked: Lowe 66 mins.
READING: Al-Habsi, Gunter, Van den Berg, McShane (c), Evans, Beerens, McCleary, Samuel (sub Kermorgant 60 mins), L. Moore, Blackett, Kelly (sub Cooper 90+4 mins).
Subs not used: S. Moore (GK), Harriott, Wieser, Meite, Watson.
Goals: Samuel 32 mins, L. Moore 60 mins, Evans 90+2 mins
Booked: McCleary 36 mins.
Attendance: 10,982 (including 370 visiting supporters)