The Impact outplayed New York City FC and controlled most of the game but ultimately lost 2-1.
"It's a difficult one because I felt we dominated the whole game," said Montreal coach Frank Klopas. "The only thing that matters in the end is just the score, but it hurts. This was probably the best game we've played here at home, from start to finish.
"It's a tough pill to swallow."
Spanish striker David Villa scored both goals for the visitors. NYCFC goalkeeper Josh Saunders was sensational in the win, making eight saves.
The Impact (5-7-3) controlled most of the game and outshot New York 25-5 with a season-high 10 shots on target. The home side saw more of the ball and completed more passes. Montreal took more than three times as many corners (10-3) and crosses (26-8) as New York City.
"We deserved a win," said Impact goalkeeper Evan Bush, who stopped one of three shots he faced. "At the end of the day, I didn't do my job the way I should have done it and it cost us points tonight. Both goals I feel like I should save.
"Sometimes you have games like that, and unfortunately it came on a night we played a pretty good game. I feel bad that I let the guys down."
Designated player Villa put NYCFC (5-8-5) in front against the run of play in the 34th minute. After intense and sustained pressure by the home side, Villa capitalized on a failed clearance by Laurent Ciman to fire home his team-leading seventh goal of the season from a tight angle.
With the score tied 1-1 late in the game, Villa curled a free kick from the edge of the 18-yard box around Montreal's wall and past Bush for his second of the game. Villa won the set piece after he was tripped by defender Ambroise Oyongo.
Despite the five-man wall not doing the trick, Bush had only himself to blame.
"You want the guy to take the shot to that side," said Bush of Villa's free kick. "You can't cover the whole goal with the wall. If he's going to beat you over the top of the wall, then that's fine. At the end of the day, the wall wasn't the problem. It was a save that I should make. That's all that it is."
New York City has now defeated Montreal twice in three weeks after winning 3-1 at Yankee Stadium on June 13.
Montreal, which fell to ninth in the Eastern Conference, lost for the first time at Saputo Stadium since May 9.
It looked like Montreal and New York would draw after Ignacio Piatti scored from the spot in the 77th minute following Thomas McNamara's hand ball in the box.
But the Impact were ultimately punished for failing to convert great chances early in the game as the home side tore holes in New York's defence throughout the first half.
In the 16th minute, Piatti beat Saunders from roughly 10 yards out, but defender Shay Facey blocked the shot.
Minutes later, midfielder Dilly Duka was sent in all alone on goal, but Saunders charged out of his net and got an arm on the shot.
In the 26th minute, Saunders came up big again, diving to his left to prevent Calum Mallace's shot from flying into the top corner of the net.
Notes: There were 18,112 fans in attendance. … Impact captain Patrice Bernier missed the game because of a red card his last time out. ... Maxim Tissot, on international duty with the Canadian national team, was also absent. ... Montreal led 11-3 in shots at halftime.