Gers took an 11th-minute lead through a well-worked move which culminated with Lee Wallace's first goal for the club.
But the questionable loss of McCulloch for elbowing Graham Carey midway through the game changed the course of the match.
St Mirren struck twice in quick succession before the break through Aaron Mooy and Paul McGowan to leave the Scottish champions with plenty to do, but despite an improved second-half showing, they could not find an equaliser.
And their afternoon was made worse when Goian received his marching orders at the death for a second yellow card.
After Celtic won their game at home to Kilmarnock 2-1, Rangers' lead has been trimmed to a single point ahead of Wednesday's Old Firm derby at Celtic Park.
St Mirren began with confidence but Danny Lennon's side were exposed by the counter-attacking Glaswegians, who broke through their defence with ease.
Kyle Lafferty sounded the first warning when he latched on to a through ball eight minutes in only to drag his shot across goal.
But three minutes later the deadlock was broken. Sasa Papac delivered the ideal, weighted through ball, and Wallace stole in, cut across the left-hand side and poked a finish past Craig Samson in the St Mirren goal.
Rangers were quite happy to concede possession, but looked like a side capable of scoring.
The sending off swung the momentum completely. Carey was certainly struck by McCulloch's elbow as the pair jostled in the box, but there was doubt as to whether there was any intent behind it as McCulloch tried to wriggle free.
St Mirren piled forward, going close when Steven Thompson's near-post flick forced a goal-line clearance from Steven Davis.
And they got the reward their pressure deserved through a moment of magic from Mooy.
He held the ball up well before turning past Steven Whittaker and away from two other blue shirts then unleashed a ferocious shot to beat Allan McGregor at his near post.
A shell-shocked Rangers looked to survive to the interval, but in stoppage time player of the half McGowan was picked out by David van Zanten's perfect pass after Nikica Jelavic sloppily surrendered possession. The midfielder showed composure to dink a finish over McGregor into the far corner.
St Mirren lost their momentum a little thereafter, with Rangers substitute Sone Aluko making a continued nuisance of himself down the right wing. But despite more possession, Rangers could not get back on level terms.
Aluko lashed an effort into the side netting before Jelavic, ineffectual throughout, squandered their best chance by stabbing a one-on-one chance wide of the target after 54 minutes when it looked easier to score.
The hosts rode their luck, but with news that Celtic had gone ahead in their game filtering through, the need for a Rangers goal became more pressing still.
But indiscipline cost them, with Goian picking up two yellow cards in the second half for pulling back Gary Teale, which means that he is set to sit out the Old Firm derby along with McCulloch.
And with the two-man advantage it was St Mirren who nearly struck at the death, with McGowan rounding the keeper only for Kyle Bartley to prevent a goal with his lunging clearance.
St Mirren held on for a win that cemented their position in mid-table, while giving Rangers plenty to worry about going into Wednesday's big game against an in-form Celtic.