Czech Berdych recorded his fifth win in eight matches over Federer, triumphing 3-6 7-6 6-4 while top seed Djokovic beat Juan Martin del Potro 6-3 7-6.
Djokovic and Federer have claimed eight of the past 10 Dubai titles between them and the 5,000 capacity crowd were urging the world's top two to win through under the floodlights.
Serb Djokovic obliged in the first semi but a tired Federer fell short, losing at the semi-finals stage of the tournament for the first time in eight appearances.
"I couldn't have a better feeling than this one, coming from court playing Roger almost in front of his home crowd," Berdych said.
The Swiss went into the match with an 11-5 winning record against the world number six, although the Czech had been victorious in four of their past seven meetings, including at Wimbledon and the U.S. Open.
Federer broke in the first set when Berdych slugged a whipped forehand from mid-court into the net for a 5-3 lead. He sealed the set with a second set ace.
The Swiss surged from 5-2 down in the second, but then fluffed three match points in the tiebreak before Berdych forced a deciding set with a bludgeoned return winner.
In the final set, two miscued forehands and a double fault from Federer gave Berdych two break points at 2-2.
The Swiss saved the first with an ace, but skewed another forehand wide to fall 3-2 behind and Berdych served out the match.
"I leave this match with a lot of regrets," Federer said. "The match was in my racket. You do all the right things for so long and then at the end you've got to explain why you didn't hit two shots decent."
Earlier, Djokovic extended his winning streak to 17 matches by beating Del Potro 6-3 7-6.
Djokovic, unbeaten since October in a run that includes a third straight Australian Open title, eventually proved too much for a defiant Del Potro.
The Serbian had breezed through the opening three rounds without dropping a set but Del Potro - the only man outside of the men's 'big four' to win a Grand Slam since 2005 - was a different prospect.
The former U.S. Open champion squandered a 3-0 second-set lead only to then break back when Djokovic was serving for the match at 5-4 up in the second, with the Argentine forcing a tiebreak.
Djokovic ultimately triumphed, a forehand winner from mid-court the only point in the tiebreak going against serve.
"His serve is very powerful, his forehand from the back of the court he can do anything with - I needed to stay in it when I was a break down," Djokovic said in a courtside interview.
"I played a poor game when I needed to close it out but he's a great player, so it was always going to be challenging."
The three-time Dubai champion did not start with his usual fluency but he improved as the sun set and the temperature fell.
Djokovic claimed the first break point with Del Potro serving at 2-3, the Argentine drifting a forehand long from mid-court.
The Serbian seized the chance, pushing his opponent wide with an angled drive that found Del Potro wanting and went 4-2 up.
Djokovic dictated play from the baseline, exploiting every short ball and finding angles that had the towering Del Potro scrambling in vain to counter and he sealed the first set in 35 minutes.
Djokovic is a crowd favourite but the Argentines in the stands, dressed in the national team's colours, cheered their man's every point, chanting his name at end-changes.
That seemed to inspire him and he held to love in the second set's opening game before going 0-40 up in the next.
Djokovic saved the first two break points with successive aces but the third saw him drag a cross-court backhand wide to fall 2-0 behind.
Serving at 3-1, Del Potro scuffed a backhand into the net to give Djokovic a break point.
Preparing to serve, Del Potro was given a time violation which was met with a cacophony of boos from the stands. When the point was played, the Argentine mis-hit to gift a break back.
Djokovic raced into a 5-3 lead, faltered, then showed his class to book a place in his fourth Dubai final in five years.
ATP Dubai semi-final results
3-Tomas Berdych (Czech Republic) beat 2-Roger Federer (Switzerland) 3-6 7-6(8) 6-4
1-Novak Djokovic (Serbia) beat 4-Juan Martin Del Potro (Argentina) 6-3 7-6(4)