The win also gave Moser the lead in the general classification, the Italian enjoying a five-second advantage over Omega Pharma-Quick-step’s Michal Kwiatkowski.
On a stage peppered with ascents, albeit none over 1000m above sea level, mountain rider Daniel Tekleimont took the opening points before being dropped by the peloton and losing his mountains jersey in the process.
Tomasz Marczynski overtook Tekleimont for the mountains lead by winning the last climb but it was Henao and Moser who did the lion's share of the work, the Team Sky man breaking with 15km to go closely followed by Przemyslaw Niemiec (Lampre) and Jon Izaguirre Insausti (Euskaltel-Euskadi).
Niemiec caught and passed Henao on the descent but could not maintain his lead and was quickly swallowed up by chasing pack.
Henao fashioned another attack just before the crest of the final ascent, dropping Izaguirre who had tried to latch on to his back wheel, and nearly leading all the way to the line.
But with just 50m to go, Moser launched his attack, pipping Henao to the line - although the Team Sky rider held on for second ahead of Kwiatkowski.