Fowler switched the Roar to three at the back during the break and the tactical switch paid dividends, with O’Donovan ending a 320-minute goal drought early in the second half before twice scoring from the penalty spot.
Aaron Amadi-Holloway scored the other goal for the Roar, the big Welsh striker bundling home from close range in the 60th minute for his first A-League strike.
The victory was sealed after VAR official Craig Zetter spotted a handball by Denis Genreau and referee Alex King awarded the decision in the 82nd minute after consulting the pitchside monitor.
The second-half dramatics were a mile away when Maclaren opened the scoring against his old club in the sixth minute.
Roar captain Tom Aldred misjudged a drifted cross by Marcelo Cabrera and Maclaren pounced to slide the ball past Max Crocombe.
O’Donovan believed he had a penalty midway through the half when he appeared to be tripped by City defender Harrison Delbridge, but King and the VAR officials disagreed, much to Fowler’s fury.
That fury would have risen to incandescence in the 29th minute when Maclaren somehow rose above Roar defender Daniel Bowles to head home his second.
In response, Fowler made his first substitution in the 34th minute, taking off Jake McGing for Australian under-17 representative Jordan Courtney-Perkins before making a second change at the break with Bowles making way for Jai Ingham.
The changes altered the game as O’Donovan ended the Roar’s goal drought.
Maclaren headed home a third almost from the kickoff but, when Amadi-Holloway made it 3-2 moments later, the comeback was very much on.
O’Donovan coolly slotted his first penalty in the 63rd minute to level the scores, after Amadi-Holloway was tripped before scoring his controversial winner followingr the VAR intervention against Genreau.
The Roar head to Wellington next week to face the winless Phoenix, while City face Western Sydney at Bankwest Stadium.