Kyle Chipchura gave the Canadiens -- who beat the Senators 5-0 the night before in Montreal -- a quick lead when he beat Gerber between the pads 35 seconds in with a wrist shot from the right faceoff circle.
Neil, who scored six goals in 68 games last season, got his third in four preseason games 16:54 into the second to put the Senators up 2-1.
Alfredsson made it a two-goal lead 1:11 later when he put a backhand past Denis at 18:05 after he got behind the Canadiens' defense to accept Jason Spezza's breakaway pass.
"I think the key for our team tonight is that we played the game harder," Ottawa coach Craig Hartsburg said. "We played with some passion. We were very upset with the way we played (Friday) night."
Denis made 15 saves overall in the first and second periods. The 31-year-old veteran made his third preseason appearance for Montreal, which will likely begin the season with 21-year-old Carey Price as its No. 1 goalie, backed up by 23-year-old Jaroslav Halak.
"I understand where I'm at in my career and I'm trying to push those guys in a very healthy competition," said Denis, who played 10 games with Tampa Bay last season and another 32 for Norfolk of the AHL.
Cedric Desjardins stopped nine shots in the third for the Canadiens (3-2-0).
"We maybe didn't have the experience that they had, but we battled hard," said Chipchura, one of just seven players in the lineup that played for the Canadiens last season. "When you play against established players like that, it's a lot of fun, especially when you keep it close."
The Senators (3-2-0) leave Sunday night for Sweden, where they will finish training camp before opening the NHL season Oct. 4-5 with two games against the Pittsburgh Penguins in Stockholm.
"It's going to be fun, there's no question -- I'm looking forward to it," said Alfredsson, a member of Sweden's Olympic gold medal team in 2006. "It's going to be extra special, I guess, going back to my hometown for a few days to play an exhibition game and show the guys around. I've been bragging about Gothenburg for about 12 years so now we're going to see if I'm a liar or not."
The team announced during the game that 39-year-old defenseman Luke Richardson agreed to terms on a one-year, two-way contract. Richardson, an Ottawa native and veteran of 1,415 NHL games, had two goals and nine points in 76 games last season, his first with the Senators.