After a dismal and goalless first-half, a horror mistake by Saints defender Steven Anderson when he allowed himself to be dispossessed by Kris Commons allowed Anthony Stokes to fire the visitors ahead.
To the anger of the Saints players and fans, skipper Dave Mackay was shown a straight red card in the 75th minute by referee John Beaton for a foul on Hoops substitute Derk Boerrigter inside the box with Nir Biton converting from the spot-kick as the Perth claims of a dive by the Dutchman continued.
Hoops midfielder Callum McGregor added a third in the 85th minute with a low drive which keeper Alan Mannus should have saved to compound a miserable night for the Scottish Cup winners, while the visitors, not at their best, will be pleased with the win that looked far from certain for much of the match.
Former Hearts and Sunderland keeper Craig Gordon, signed on a free during the summer, was nominated by Hoops boss Ronny Deila as number one following the departure of Fraser Forster to Southampton with Lukasz Zaluska remaining as back-up.
Winger James Forrest made his first start of the season as replacement for stand-in skipper Charlie Mulgrew, who was suspended.
Jason Denayer, the 19-year-old defender who signed on a year-long loan from Manchester City, started on the bench for the champions as Brian Easton, Lee Croft and Liam Caddis came in for Frazer Wright, David Wotherspoon and Scott Brown, who all started on the bench for the home side.
The Scottish Cup was paraded before the match but the home side appeared reticent rather than inspired in the early stages, happy to contain a purposeful Celtic side captained on the night by defender Mikael Lustig.
Forrest, the pick of the Parkhead players in the first half, took possession of a Commons pass inside the box in the 14th minute, turned inside Easton with some ease but fired wide of the near post.
Saints were making little impact in a positive sense but in the 21st minute Gordon, playing his first competitive game in over two seasons, was asked to make his first save which he did with some assurance, parrying a 20-year-old strike from Steven MacLean, after Biton had failed to clear his area properly.
Goalscoring opportunities were at a premium as the game slowly deteriorated.
Wotherspoon replaced Liam Caddis for the start of the second half and it was the home side who had the first real chance five minutes later when Michael O'Halloran cut in from the left before unleashing a shot which inadvertently came off MacLean and past the post, with Gordon not knowing too much about it.
A drive from Lee Croft seconds later was deflected past for a corner by Hoops defender Virgil van Dijk but the McDiarmid Park side could not capitalise on the brief spell of pressure.
However, all that positive work was undone in one moment of madness by Anderson.
The Saints stopper took far too long on the ball 35 yards from goal, allowing Commons to put in a tackle with the loose ball breaking to Stokes who rounded Mannus before slipping the ball in from an acute angle.
Anderson's team-mates remonstrated with the stopper as Celtic immediately stepped up the tempo, McGregor coming close with a drive which just escaped the near post.
Boerrigter replaced Forrest before Saints' new signing Adam Morgan came on for O'Halloran to make his debut.
There was a shout for a St Johnstone penalty when Mackay went down in the box after a challenge by Van Dijk but Beaton was unimpressed but it was evidence that the home side were back in the game
But that notion ended when Beaton adjudged Mackay to have fouled Boerrigter as the Hoops substitute set himself to get his shot away and when all the fuss had died down, Biton knocked the ball past Mannus.
There was time for McGregor to drive through the legs of Mannus, who looked in horror as the ball trickled over the line.
The Northern Irishman made a good save from the Celtic player moments later but by that time the points were Parkhead-bound.