The striker beat City goalkeeper Frank Fielding with a low 25-yard drive with his right foot from outside the right corner of the box to enhance Reading’s promotion prospects and make it nine defeats in 10 games for Lee Johnson’s Robins.
The home side broke the deadlock in the 27th minute when Joe Bryan pounced on a poor clearance from Reading goalkeeper Ali Al Habsi to defender Paul McShane.
The midfielder’s low drive from 25 yards was saved at full stretch by Al Habsi but he could only palm the ball into the path of Tammy Abraham who was left with a simple finish.
The Chelsea loanee was on target again from the penalty spot two minutes after the break, sending Al Habsi the wrong way with a low spot-kick after Tyler Blackett had brought down Callum O’Dowda. It was Abraham’s 17th goal of the season.
But Reading got back into the game in the 72nd minute when Chris Gunter set up substitute Liam Kelly, who netted with a low right-footed shot from 12 yards as Aden Flint failed to close him down. Four minutes from time Kermorgant lashed home a right-footed equaliser from a similar distance after Kelly had supplied the cross, and his last-gasp winner provoked wild celebrations among 1,800 travelling Reading fans
City set up like the away side with Abraham a lone striker and a five-man midfield lying deep in front of the back four.
The system frustrated Reading for much of the first half, while the home side caused problems on the break.
Chances were at a premium before Abraham’s goal, with Danny Williams shooting wide for Reading and Bryan firing over from distance for City.
The visitors did start to threaten as the interval approached, with Kermorgant nodding narrowly wide before striking the crossbar with a more powerful header from Blackett’s 43rd-minute cross.
Blackett looked favourite to win the ball when conceding the penalty as O’Dowda latched onto a Bryan pass and was substituted soon afterwards, with Jordan Obita going on as replacement.
Korey Smith almost made it 3-0 when breaking through a fragile Reading back line but Al Habsi blocked his close-range shot.
Josh Brownhill then tested the Reading goalkeeper from distance after winning the ball in midfield.
Jaap Stam sent on his second substitute in the 66th minute with Kelly replacing John Swift. Soon afterwards Garath McCleary tested City goalkeeper Fielding with a low drive.
Kelly’s goal roused Reading to pile on pressure. City head coach Johnson responded by sending on Aaron Wilbraham for Luke Freeman in a bit to help Abraham hold the ball up front, but the Royals were able to wear down the home side’s resistance.