Matt Niskanen scored for Philadelphia (16-8-5), which had won five games in a row and was 6-0-1 in its previous seven.
The Flyers lost at home in regulation for the first time since Oct. 19. They were 7-0-4 in their previous 11 games at Wells Fargo Center. Brian Elliott made 15 saves.
"We get a 10 for effort, worked extremely hard, had the puck most of the night, most of the night in their end," Philadelphia coach Alain Vigneault said. "We get a seven for execution. We're making plays, maybe not getting on the inside. We got some real good looks, but we didn't execute."
Kessel gave the Coyotes a 1-0 lead with a power-play goal at 2:25 of the first period when he finished a give-and-go with Clayton Keller.
His second goal made it 3-1 with 1:02 remaining in the third period. It was an empty-net power-play goal that came after Flyers forward Kevin Hayes was called for cross-checking Coyotes defenseman Oliver Ekman-Larsson with 2:23 remaining in the third period.
Ekman-Larsson did not return to the game, and Tocchet had no update on his condition.
It was Kessel's second two-goal game of the season (Oct. 17 against the Nashville Predators). He had two goals in the previous 23 games.
Tocchet said he wasn't worried about Kessel producing, in part because the 32-year-old forward, who played his 804th consecutive regular-season game Thursday, was dealing with an injury.
"He's missed the net more than I've seen him," Tocchet said. "He's passed the puck well, given some guys some Grade A (scoring chances). He was banged up for a stretch injury-wise that he was playing through. We get him healthy and skating, it's better to have the record we have and him struggling ... he'll turn it around for us."
Garland scored on the rebound of a Jakob Chychrun shot to make it 2-0 at 12:57 of the third period.
Niskanen made it 2-1 with 4:43 remaining. With Elliott pulled for the extra attacker, his shot from the left point went off Garland's leg and over Kuemper's shoulder.