The success at Solitude was secured for Glentoran off a goal in the closing moments of the first half and early stages of the second by Donnelly.
It helped the Glens turn the tables on a 1-0 deficit as Cliftonville enjoyed a perfect start when Jamie McDonagh fired home from distance.
Late Cliftonville pressure threatened an equaliser but the Glens managed to protect the lead - although a late counter-attack almost led to an increased advantage for the visitors with the Reds stretched but Seanan Clucas cleared the crossbar.
McDonagh broke the deadlock in superb style on four minutes by picking up Luke Turner’s pass and curling a long-range effort beyond Aaron McCarey.
McDonagh was sharp across the initial attacking stages by the home side but Rory Donnelly missed out on an equaliser when Robbie McDaid whipped over a cross but the back-post connection proved the wrong side of the post.
It was 1-1 in the closing seconds of the first half as another Glentoran attack down the right led to an opening, this time converted by Donnelly with a near-post flick off Rhys Marshall’s cross.
Glentoran had a second celebration minutes into the second half when Hrvoje Plum’s corner-kick delivery was met by Donnelly in space with a decisive header.
The visitors had gone close previously after the break off a set-piece met by Patrick McClean that left goalkeeper Luke McNicholas and Conor McDermott scrambling to stop - but Donnelly then made his mark.
McCarey was alert to stop Kris Lowe’s late drive and claw away a Levi Ives free-kick attempt as Cliftonville pushed hard for a way back into the match.
However, Glentoran had the best opening for the game’s fourth goal when a break led to substitute Michael O’Connor finding Clucas in space but, with McNicholas racing out, the midfielder lifted his shot beyond the target.
Ultimately, the points were settled by Donnelly.
Glentoran now sit three points off league leaders Linfield, with Cliftonville third.
Cliftonville: McNicholas, McDermott (Kearns, 59), Ives, R.Curran, McDonagh (O’Neill, 76), Lowe, Addis, Doherty, Gormley, Turner, Gallagher (C.Curran, 70).
Subs (not used): McKenna, Harney, Donnelly, Coates.
Glentoran: McCarey, Burns, Marshall, J.Donnelly (O’Connor, 78), R.Donnelly, McDaid, Murray (Crowe, 77), McClean, Clucas, Marron, Plum.
Subs (not used): Garrett, Mitchell, O’Connor, Smith, Cushnie, Glendinning.
REFEREE: Andrew Davey.