Colbrelli's Bahrain-Merida team had set him up perfectly going into the one-kilometre final climb. They had chased down lone escapee Brandon McNulty (Rally Cycling), who survived from the day's break until the agonising final few hundred metres.
Dane Magnus Cort Nielsen (Astana) came in for second place, with Dutchman Timo Roosen (LottoNL-Jumbo) in third.
Overall race leader Elia Viviani (Quick-Step Floors) finished in sixth spot to retain his advantage at the top of the general classification with just one stage remaining in the race.
How it happened
McNulty was part of the day's break, also comprising his Rally Cycling team-mate Robin Carpenter, Conor Dunne (Aqua Blue Sport), Christopher Williams (Novo Nordisk), Sun Xiaolong (Mitchelton-BikeExchange) and Simone Bevilacqua (Wilier Triestina).
The group lost Williams and Xiaolong inside 50km to go, and then Bevilacqua also dropped off the pace leaving three riders with 40km to go.
Astana decided to play some cards early in a surprise move, with Daniil Fominykh and Zhandos Bizhigitov attempting to slip away. This did not seem to go down well with the bunch, causing the pace to be upped. The duo were caught heading into the final 20km.
Meanwhile, at the front of the race Carpenter swung off after working for team-mate McNulty who was evidently feeling strong. As they spun towards Hatta Dam the terrain became more lumpy, and Dunne was also dropped leaving just McNulty.
McNulty slipped into time trial mode and looked like a rider who was sniffing victory – but the American had not counted on the severity of Hatta Dam's final ramp to the line, reaching 17 per cent gradient in places. Also not playing to his favour was the pace being set by Bahrain-Merida behind him.
McNulty visibly ground to a halt with only a few hundred metres to go as the rampaging group of assorted sprinters and classics riders blew past him to contest the win.
Colbrelli led from the front, with his rivals simply unable to beat his speed up the climb and over the line.
"The final two kilometres were really challenging," Colbrelli said after the finish. "Vincenzo [Nibali] did really a great job with the team. I had a mechanical problem, but in the end I took the win. The breakaway rider was very strong. We caught up with him just 20/30 metres to go."
Despite the finishing gradient, sprinter Viviani managed to keep in touch with the front runners to finish sixth and at keep hold of the leader's jersey.
Viviani now leads Cort Nielsen by a slim margin of two seconds overall, with stage winner Colbrelli in third at four seconds.
The 2018 Dubai Tour concludes on Saturday, February 10, with the final stage: a flat run from Skydive Dubai to City Walk comprising 129km and expected to end in a bunch sprint.
Dubai Tour 2018, stage four: Skydive Dubai to Hatta Dam, 172km
1. Sonny Colbrelli (Ita) Bahrain-Merida, in 3-40-50
2. Magnus Cort Nielsen (Den) Astana
3. Timo Roosen (Ned) LottoNL-Jumbo
4. Alexander Kristoff (Nor) UAE Team Emirates
5. Giacomo Nizzolo (Ita) Trek-Segafredo
6. Elia Viviani (Ita) Quick-Step Floors
7. Tom Bohli (Swi) BMC Racing
8. Loïc Vliegen (Bel) BMC Racing
9. Nacer Bouhanni (Fra) Cofidis
10. Nathan Van Hooydonck (Bel) BMC Racing
General classification after stage four
1. Elia Viviani (Ita) Quick-Step Floors, in 16-00-28
2. Magnus Cort Nielsen (Den) Astana, at 2 secs
3. Sonny Colbrelli (Ita) Bahrain-Merida, at 4 secs
4. Nathan Van Hooydonck (Bel) BMC Racing, at 7 secs
5. Nacer Bouhanni (Fra) Cofidis, at 8 secs
6. Loïc Vliegen (Bel) BMC Racing, at 8 secs
7. Timo Roosen (Ned) LottoNL-Jumbo, at 10 secs
8. Alexander Kristoff (Nor) UAE Team Emirates, at 14 secs
9. Jean-Pierre Drucker (Lux) BMC Racing
10. Dylan Teuns (Bel) BMC Racing
Thank you for reading 10 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1