Zanotti, whose previous European Tour title came back in 2014, eagled the 18th in a flawless closing 63 at Saujana Country Club to finish 19 under par, a shot ahead of American David Lipsky.
Willett took a three-shot lead into the final round, but could only manage a closing 73 to finish in a tie for fifth with China's Li Haotong, who carded seven birdies in an error-free 65.
Zanotti began the day six shots off the lead and, despite five birdies in his first 13 holes, was still three behind Lipsky with four holes to play.
However, the 33-year-old -- who had missed the cut in all three of his previous events in 2017 -- then birdied the 15th and 17th before hitting a superb three-iron approach into the last and holing from 10 feet.
Lipsky, who had followed four birdies in a row from the 10th with a bogey on the 14th, needed to birdie the final two holes to force a playoff and although he picked up a shot on the 17th, he was unable to get up and down from a greenside bunker on the last.
"It was probably the best round of my career," Zanotti said. "It was a really good day, a really good week and I'm really happy.
"It was at the 15th where I thought I might be able to win, when I made birdie there. I thought, maybe I'll have a chance if I make two more birdies, but I made a birdie and an eagle so it was great.
"To shoot nine under on the last day to win a golf tournament is incredible. I have been working a lot with my coach and with my team and I've been making some changes.
"This is because of all that hard work. I missed the last three cuts but I was hitting the ball well and was not unhappy. This week I just came here and tried to take it easy."
Lipsky had the consolation of strengthening his bid for a place in the WGC-Mexico Championship via the Race to Dubai, the 28-year-old moving up from 26th to fourth in the standings.
The top 10 on Feb. 21 will qualify for the first World Golf Championship event of the year and Lipsky said: "I'm really happy with this week, all in all.
"My goal was to finish top three or so to try and lock myself up for the WGC in Mexico, and I did that, so I'm pretty proud of the way I handled myself this week.
"I did the best I could. Hats off to Fabrizio because he played great; 63 in the final round, most of the time that's going to get the job done, so I can't think too much about it."
Willett's overnight lead was wiped out in the space of nine holes, the world No. 15 playing the first eight holes in one under par before making a bogey on the ninth after his tee shot finished behind a tree.
A three-putt bogey on the 10th was wiped out by a birdie on the next, but another three-putt bogey on the 14th effectively ended Willett's chances as Zanotti charged through the field.
"Not what I worked for that today," Willett wrote on Twitter. "Shows signs of improvement still."