The Colombian forward earned his fifth red card of the season for elbowing Scott Brown only four minutes after Odsonne Edouard had opened the scoring.
Ryan Kent scored a second-half equaliser, but James Forrest claimed all three points for Celtic with an 86th-minute strike that puts the champions 13 points clear at the top of the table after 31 matches.
Edouard broke the deadlock at Celtic Park in style 27 minutes in, twisting and turning past Joe Worrall before firing left-footed past Allan McGregor from near the penalty spot.
Morelos then handed Celtic a further boost by throwing an arm out at Brown in an incident spotted by one of the assistant referees, which promptly earned him a straight red card.
Celtic looked to be heading for a win that would have dealt a huge blow to Rangers' lingering title hopes, but Kent capitalised on some unconvincing defending to slot past Scott Bain.
Dedryck Boyata then hobbled off after Neil Lennon had made all his substitutions, leaving each side with 10 men heading into a tense final quarter.
And it was Celtic who struck the crucial third goal. James Tavernier gifted possession to the home side, allowing Edouard to tee up Forrest to drill home the winner with four minutes left.
Kent somehow escaped punishment for aiming a punch at Brown as Celtic celebrated their winner, which has put the title race firmly in their hands, and there were further scuffles after the final whistle, sparked by Brown, Bain and Andy Halliday.