Vincent Trocheck, Nino Niederreiter and Warren Foegele scored for the Hurricanes (17-6-1), who improved to 3-0-1 against the Panthers this season and 8-1-1 at home. James Reimer made 21 saves.
"Both teams were playing on top of each other, and I like the fact that we hung in there and didn't get frustrated," Carolina coach Rod Brind'Amour said. "We just kept playing and made some big plays when we had to."
Keith Yandle played his 1,000th NHL game for the Panthers (15-5-4), who had their five-game point streak end (3-0-2). Chris Driedger made 22 saves.
"Over the course of the season, there's a couple games that you know, whether it's fatigue or scheduling, it caught up to you," Florida coach Joel Quenneville said. "I'm not making excuses, but tonight we weren't great."
Trocheck scored eight seconds into a power play to give the Hurricanes a 1-0 lead at 15:55 of the first period. He took a pass from Andrei Svechnikov at the left post and swept the puck past Driedger for his fourth goal in the past five games.
Trocheck, who was traded from the Panthers to the Hurricanes on Feb. 24, 2020, has scored one goal in each of the four games against Florida this season.
"I think it's just luck of the draw on that one," Trocheck said. "Obviously, it's nice to get one against the former team. There's motivation every night, so I don't think it's any different."
Niederreiter made it 2-0 at 4:52 of the second period after Martin Necas carried the puck through the neutral zone and fed him for a wrist shot from the left face-off circle.