The 17-time major winner and third seed won 6-4, 3-6, 6-1, 6-4 in two hours, 40 minutes under the closed roof on Rod Laver Arena and will face Belgium's 15th seed David Goffin in the next round.
Federer becomes the first man to win 300 Grand Slam matches and extends his record over Bulgarian 27th seed Dimitrov, dubbed “Baby Fed” because of the similarity in their playing styles, to 5-0.
Last year Federer was ambushed in the third round by Italian Andreas Seppi, but he made no mistake this time at the same stage against Dimitrov.
But it wasn't an entirely convincing display from the four-time Australian Open winner who committed an uncharacteristic 55 unforced efforts, much more than Dimitrov's 44.
“It was a difficult position for me after losing the second set and Grigor was playing well. I thought I was struggling a little bit,” Federer said.
“I didn't feel it was really happening out there and it was an important start for me to the third set.
“Thankfully I got the early break and I was able to stay in the lead and everything started to come back, the serve, my footwork. It was complicated, but those matches are even nicer to win, I must say.”
Federer only lost his serve once in 18 service games and broke the Bulgarian's serve four times, twice in the third set, with Dimitrov troubled by a sore right elbow and losing serving power.
He sought courtside treatment from the trainer several times during the match.
Dimitrov was bidding to reach the round of 16 at the Open for the third straight year including making the quarter-finals in 2014, where he lost to Rafael Nadal.