The hosts took the lead a minute from the end of a thrilling first half when Niclas Eliasson's cross from the left was met with a firm downward header from Kasey Palmer, who netted from just outside the six-yard box.
But back came City and substitute Callum O'Dowda crossed from the left in the 81st minute for the unmarked Rowe to net with a stooping header from 10 yards.
Both sides hit the woodwork in a frantic opening half hour that saw some desperate defending at each end.
It was end-to-end stuff from the opening minutes, which saw City goalkeeper Bentley dive to his left to palm away Fletcher's 25-yard shot.
McNair had a shot blocked and headed wide of the near post from a Marvin Johnson corner as Boro signalled their attacking intentions.
Bentley tipped an Assombalonga shot around a post in the 36th minute and the only surprise was that the game remained goalless for so long before Palmer's strike.
Soon the second half was following a similar pattern as Bentley dived to save McNair's low drive from distance and at the other end Randolph blocked Afobe's close range effort.
Assombalonga's goal followed almost immediately, but O'Dowda repaid his head coach's faith with the assist for Rowe's equaliser.