Zverev played a dreadful service game at 3-4 in the first set, double-faulting twice then framing a forehand out to gift Fognini the break which he backed up by holding serve to love.
The German ranted at his watching father and coach and seemed in trouble again early in the second set. Fognini threatened again at 2-2 but Zverev responded with a superb dipping forehand pass on breakpoint down.
Two more double-faults offered Fognini another couple of chances to break, but Zverev fired down aces to save both. It proved a turning point as Zverev suddenly focussed on the job in hand and he broke the Fognini serve in the next game and then again to level the match.
Zverev seized on a Fognini dropshot to whip away a forehand and break serve for 3-1 in the third set and the Italian's frustration boiled over in the next game when he lopped a forehand long and slammed his racket on to the court.
Fognini, who beat Zverev on his way to the Monte Carlo title in April, scattered his rackets then called for the trainer to have strapping applied to his right calf.
The errors mounted up and a double-fault ended the third set. He was still a danger though and forced the fourth set into a tiebreak. Zverev went 6-3 ahead but wasted his first match point before Fognini belted a forehand winner on the second.
Zverev made sure on the next point as Fognini slapped a forehand wide.