The Mitchelton-Scott rider kept with the lead pack through the climb sections of the 126km stage before delivering a rapid sprint finish to claim his first stage win since the 2017 Tour de Pologne.
It was a brilliant bounce back from Haig whose mistake on stage three allowed Fuglsang to his second win of the five-stage event.
Race leader Fugslang attacked at the climb of Alto del Purche but Landa and Haig kept pace.
Haig attacked at the crest of the summit, and while it was Landa who made a move at the bottom of a steep descent into Granada, the Aussie had the freshest legs to get to the line first.
“Taking the win against Fuglsang and Landa is quite important to me, they are the sort of riders I want to try and become, true Grand Tour contenders," Haig said after the race.
" So to be up there with them today was a really nice feeling and a reassuring feeling knowing I am heading in the right direction."
The final stage takes place on Monday (AEST) with a 13-km time trial around Mijas.
Haig remains in third place in the general classification 35 seconds behind leader Fugslang.