Wayne Simmonds and Matt Read scored for the Flyers, who lost in the first home game of their 50th anniversary season. Goalie Steve Mason made 23 saves.
The Flyers went 1-for-7 on the power play, including 1-for-5 in the second period.
The loss was the Flyers' third straight (0-2-1) after a season-opening win at the Los Angeles Kings.
"It's two too many," Simmonds said. "You lose one game and you hopefully should be able to turn it around. We're in a little bit of a hole here, but it's the beginning of the year, there's no need to panic here."
Garbutt scored the game-winner at 11:34 of the third. He had a chance in front that was blocked, but Ducks defenseman Korbinian Holzer pinched in from the left point and got the puck. He skated it behind the Flyers net, spun and sent it back in front to Garbutt, who one-timed it past Mason from the left side.
"I tried to put that rebound in, ended up on the ice," Garbutt said. "Sometimes when you end up falling like that, you get lost in the [offensive] zone like that. After I got up, I don't think anyone came to me. That was a great pass by Holzer. One of the best plays I've seen by a [defenseman] from behind the net."
The Ducks tied it 2-2 with 3:18 left in the second period on Perry's second goal of the season. It came after the Ducks had killed four straight penalties.
"It was huge," Perry said. "You kill off whatever we had, five penalties in the second, you come way 2-2 tied, anybody will take that. … You get at goal late, you can feel the momentum carrying in the third period."
The Ducks took a 1-0 lead at 11:24 of the first period when Wagner scored off a drop pass from Jared Boll. Simmonds' power-play goal at 4:52 of the second tied it 1-1, and Read's goal, his fourth in three games, gave the Flyers a 2-1 lead less than five minutes later.