The Ports, who have been a mixed bag so far this season, took the lead in the 20th minute when Kevin Braniff's low shot beat Conor Devlin in the Cliftonville goal.
Ronnie McFall's side made it 2-0 early in the second half thanks to a defensive howler from McMullan, whose weak backpass was intercepted by Darren Murray, who duly rounded Devlin before sliding the ball home.
The Reds fought back well and reduced the deficit in the 53rd minute when Joe Gormley capitalised on a mistake by Portadown keeper David Miskelly, and Tommy Breslin's side equalised 12 minutes from time when Barry Johnston found the net with a well-struck effort which deceived Miskelly.
The hosts looked to have done enough to claim all three points when Braniff headed home from a corner, but McMullan made amends for his earlier mistake when he stepped up to dispatch the spot-kick after Sean Mackle had fouled Ronan Scannell.
Crusaders, meanwhile, capitalised on Cliftonville's result, reducing Tommy Breslin's side lead at the top of the table to five points with a 2-1 win over Dungannon Swifts.
Dungannon opened the scoring in the 21st minute, with Matt Hazley weaving his way past several defenders and into the danger area before teeing up Josh Cahoon to finish from close range.
Jordan Owens netted the equaliser in spectacular fashion early in the second half, firing in an unstoppable volley from just inside the area after the Dungannon defence had failed to clear.
The winner was an equally impressive effort from Owens, although his finish demonstrated delicacy rather than power - the striker deftly flicking the ball into the net from Davy McMaster's low cross.
Glentoran put their off-field woes to one side as they overcame Ballinamallard at the Oval, securing a 2-1 win over the high-flying Fermanagh side.
Eddie Patterson's side, who didn't train during the week in protest at unpaid wages - found themselves ahead in the fifth minute when Richard Clarke netted from David Howland's pass.
It was 2-0 in the 18th minute when Howland got himself on the scoresheet with a close-range finish from Colin Nixon's header, but Ballinamallard began to exert their influence on the game as the hosts began to tire.
James McKenna scored his first top-flight goal to haul the visitors back into the game in the 32nd minute, and Glentoran endured a tough time in the second half as the 'Mallards pressed for the equaliser.
However, Eddie Patterson's side held out for a victory that sees them consolidate fifth place in the table.
Linfield failed to keep pace with their Big Two rivals after they could only manage a draw against bottom side Lisburn Distillery.
The Whites can count themselves unlucky not to have taken all three points, with Jordan Forsyth giving the hosts a deserved lead early in the first half with a smart turn-and-shot past Ross Glendinning.
Tim McCann's team battled gamely to preserve their lead, but Aaron Traynor gave his side an uphill task when he was sent off for a second yellow card, and former Distillery striker Gary Brown headed the equaliser in the 82nd minute.
In spite of the point, Distillery remain rooted to the bottom of the table thanks to Donegal Celtic's win over County Antrim Shield champions Ballymena United.
Shane Dolan scored the only goal of the game with a fine effort in the 38th minute after good work from Mark Miskimmin.
Finally, Glenavon moved up to ninth with a 2-0 win over Coleraine at the Showgrounds.
Ciaran Martyn opened the scoring for the visitors when he scooped a shot past Michael Doherty in the 20th minute, before Andy McGrory added a second 10 minutes from time to seal the victory.
Results in full:
Coleraine 0-2 Glenavon
Glenavon: Ciaran Martyn (20), Andrew McGrory (80)
Crusaders 2-1 Dungannon Swifts
Crusaders: Jordan Owens (46,69)
Dungannon Swifts: Joshua Cahoon (21)
Donegal Celtic 1-0 Ballymena United
DC: Shane Dolan (37)
Glentoran 2-1 Ballinamallard United
Glentoran: Richard Clarke (8), David Howland (17)
Ballinamallard: James McKenna (33)
Lisburn Distillery 1-1 Linfield
Lisburn Distillery: Jordan Forsythe (41), Aaron Traynor (SO 74)
Linfield: Gary Browne (82)
Portadown 3-3 Cliftonville
Portadown: Kevin Braniff (20,86), Darren Murray (48)
Cliftonville: Joe Gormley (56), Barry Johnston (78), George McMullan (89p)