The fourth-seeded Federer surprised fellow former world No. 1 Djokovic by a 3-6, 6-3, 6-2 margin on the hard courts at Dubai Tennis Stadium.
The Swiss superstar reversed the momentum of the match following a brief rain delay in the sixth game of the second set. Following the break, Federer broke the second-seeded Serb and went on to win 10 of the last 13 games.
Federer improved to 17-15 all-time against Djokovic.
His finals opponent will be the Czech Republic's Berdych, who overcame seventh-seeded German Philipp Kohlschreiber 7-5, 7-5 in Friday's first semifinal.
Berdych, the runner-up at last year's Dubai event, reeled off his 11th straight win, a streak that included a victory in Rotterdam this month.
He trails Federer 11-6 in their all-time meetings.