Team Sky’s Henao went shoulder-to-shoulder with the AG2R rider in the final 14km climb, holding Betancur off by the width of a tyre as the defeated man complained of an incursion from his compatriot.
Giampaolo Caruso – who had led for much of the final kilometre – faded into third, with Alberto Contador losing speed badly after the last of five categorised climbs to finish well off the podium places.
Another Colombia, Nairo Quintana of Movistar, finished fourth at the end of a gruelling 164.7km stage between Vitoria-Gasteiz and Trapagaran-La Lejana.
Quintana lies eight seconds behind Henao in second in the GC, 2s ahead of Richie Porte of Team Sky and Contador, who is fourth.
Caja Rural's Amets Txurruka had led another early breakaway for 116km of the stage before being chased down with 10km left. Mikel Landa, Romain Bardet and Daniel Navarro were also part of that group.
The lead changed hands regularly in the latter stages, with Contador apparently well placed before losing pace badly as the climb steepened.
Betancur's claims of foul play at the finish will not be upheld as if anything he veered into Henao, who had led a brave attack in the final 500m.
Stage four of the six-day race, 152km between Trapagaran and Eibar, is another hilly ride that ends with a category one climb at the finish.
1. Sergio Henao (Colombia / Team Sky) 12:24:26"
2. Nairo Quintana (Colombia / Movistar) +8"
3. Richie Porte (Australia / Team Sky) +10"
4. Alberto Contador (Spain / Saxo - Tinkoff)
5. Giampaolo Caruso (Italy / Katusha)
6. Simon Spilak (Slovenia / Katusha)
1. Sergio Henao (Colombia / Team Sky) 3:54:22"
2. Carlos Betancur (Colombia / AG2R) ST
3. Giampaolo Caruso (Italy / Katusha) +5"
4. Nairo Quintana (Colombia / Movistar) +8"
5. Diego Ulissi (Italy / Lampre) +10"
6. Richie Porte (Australia / Team Sky)
7. Alberto Contador (Spain / Saxo - Tinkoff)
8. Simon Spilak (Slovenia / Katusha)