The Royals controlled the early exchanges and went ahead through Dominic Samuel’s 32nd-minute strike, but Rovers rallied and Danny Graham headed an equaliser just before the break.
Reading restored their lead on the hour through Liam Moore’s close-range finish but Wes Brown’s header on his Rovers debut looked to have given the hosts a point.
However, Evans popped up late on to send the Royals into raptures and secure their first ever win at Ewood Park.
Reading climb back to third after a result that ended a miserable two-game losing streak on the road. Blackburn remain in the bottom three after a third successive 3-2 reverse, Preston and Brighton having already beaten them by the same margin.
Jaap Stam’s Reading side were unchanged despite the midweek defeat at Leeds. His former Manchester United team-mate, Brown, made his first-team debut for Rovers in place of the suspended Gordon Greer.
Reading controlled the game early on and Garath McCleary had the first clear-cut chance midway through the opening half when he sprung the offside trap but found Jason Steele in inspired form, denying him with a fine fingertip save.
Graham saw an effort touched behind by Ali Al Habsi but Reading took a deserved lead when McCleary’s reverse pass found Samuel who flashed a crisp near-post drive past Steele.
To their credit, Blackburn rallied and Marvin Emnes rattled the crossbar in the 41st minute after a flick-on from Graham.
A frantic minute followed when Graham flicked on again, this time for Sam Gallagher who got in behind McShane but was thwarted by a low Al Habsi save. Emnes gathered the rebound and picked his spot but Moore produced heroics to head off the line.
From the corner, Rovers got their rewards a minute from the break. Al Habsi produced another wonderful save to stop Darragh Lenihan’s powerful header but Graham nodded home the rebound.
The hosts should have been ahead early in the second half when Derrick Williams fired in a cross for Graham but he could only direct his header straight at Al Habsi from six yards.
The visitors weathered the storm and regained the lead in the 60th minute when a poor clearance fell to Liam Kelly whose thunderous 25-yard drive crashed against the bar and bounced on the line, leaving Moore to chest the rebound into an unguarded net.
Graham’s personal duel with Al Habsi saw the latter tip a header wide, but Brown marked his debut in style 17 minutes from time when he powerfully met Craig Conway’s corner to direct a header into the bottom corner.
It looked to be enough for a point but in injury time McCleary burst down the right and set up Evans who stroked home his second of the season to secure a dramatic win.