The Danish climber pounced from the main bunch of favourites with over 20 kilometres to go, bridging the gap to the stage leaders and riding alone for the final 10.
Fuglsang dedicated his win to former Astana team mate Michele Scarponi who died in a 2017 training crash.
“I said yesterday that I’d win for Michele [Scarponi] if possible," Fuglsang said. "I was told he won Tirreno-Adriatico 10 years ago.
"This was his favorite race and we were racing on his roads today. We still miss him. He was such a good guy – this one is for him.
Fugslang sits third on GC, 35 seconds behind race leader Yates and 10 seconds behind Jumbo-Visma's Primoz Roglic.
"Winning [the race will be] very difficult," Fuglsang said. "I still have to do a very good time trial to keep my spot on the podium against Tom Dumoulin but I’ll fight for it.”
Yates extended his advantage after he attacked Roglic with two kilometres to go, finishing 56 seconds ahead and taking bonus time as runner-up on the stage.
Earlier, the Brit attacked Roglic and the main bunch of favourites with 11 kilometres to go but the pair soon called a truce to counter the threat Fuglsang posed up the road.
“I said yesterday this was gonna be the hardest stage of the race and it was. I came close to the win but Fuglsang was on another level.
"I realized Roglic was hurting a little bit. I did the best I could but I don't know if 25 seconds advantage will be enough to win Tirreno-Adriatico.”