The Canucks (33-30-10) have now posted two consecutive wins for the first time since mid-January. Vancouver pulled within three points of eighth-place Phoenix, and one point of ninth-place Dallas in the race for the second wild-card playoff spot in the Western Conference.
The Sabres (20-43-8), last in the NHL by a wide margin, suffered their eighth loss in the past 10 games as they squandered an early 2-0 lead.
The Sabres built a 2-0 lead only 3:29 into the game, but the score was tied 2-2 after the first period and the Canucks led 3-2 following the second.
Kassian, who has often faced criticism since he was traded to Vancouver from the Sabres at the NHL trade deadline in February 2012, recorded the first four-point game of his career.
He stood out as the game offered another chapter in the ongoing debate about his acquisition in the four-player deal that saw former Canuck fan favourite Cody Hodgson head to Buffalo.
Ironically, Kassian, who has rarely lived up to his billing of a prototypical power forward, excelled offensively two days after saying he is playing primarily a checking role now. Hodgson, Vancouver's first choice (10th overall) in 2009, had an uneventful evening as the Sabres were badly outplayed for most of the game.
But Kassian left the game late in the third period after taking a puck in the face for the second time in the game.
The Canucks had not posted two straight wins since beating the Calgary Flames on Jan. 18, when coach Tortorella drew a suspension for charging their dressing room between the first and second periods, and Edmonton Oilers on Jan. 21.
Vancouver goaltender Eddie Lack overcame a slow start to earn the win. After allowing goals on the first and third shots that he faced in the game, Lack was sharp and finished with 16 saves.
Nathan Lieuwen, a 22-year-old Abbotsford, B.C., native who made just his second NHL career start and third appearance after being promoted from Rochester of the AHL on March 16, took the loss. He recorded 32 saves as his club was outshot 36-18.
Ennis and McBain scored on their club's first and third shots. Ennis beat Lack with a high shot just 1:11 into the game. McBain scored a gimme as Lack whiffed on the puck with his stick after it hit Vancouver defenceman Mike Stanton and slid ever so slowly into the net.
But the Canucks rallied. Richardson and Matthias scored on similar setups from Kassian a minute and 36 seconds apart midway through the first. On both occasions, Kassian fed Richardson and Matthias passes from behind the net and they beat Lieuwen with high shots from the left face-off circle.
The quick goals spoiled a strong period for Lieuwen, who made several timely saves on the likes of Daniel Sedin and Ryan Kesler, as they both returned to Vancouver's lineup from injuries suffered earlier this month, and others.
Kassian received a scare late in the first as an errant puck left a cut around the bridge of his nose. But he was able to play on and, just 1:40 into the second period, drew an assist on Weber's goal, which gave the Canucks a 3-2 lead.
The puck appeared to hit Buffalo defenceman Mike Weber and then went between Lieuwen's legs. The Canucks dominated the second, but could not score again before the period ended.
Lieuwen prevented Vancouver from taking a bigger lead with just over 12 minutes gone as he robbed Chris Higgins with his catching globe. The Buffalo rookie net minder was kept busy as the Canucks outshot the Sabres 12-4 in the second period and held a 27-10 advantage after 40 minutes.
Kassian did most of the work on Vancouver's fourth goal as he skated the puck out of the Vancouver zone, held off Sabres defenceman Henrik Tallinder and then fed Booth the puck. Booth beat Liuewen with a high wrist shot.
It was Booth's first goal since Dec. 17 against Minnesota.
Notes: Vancouver lost Henrik Sedin to an apparent knee injury late in the second period as he collided with a fallen Buffalo player behind the Sabres net. The mishap occurred after the Canucks and NHL honoured the Canucks captain for his 1,000th NHL game, played March 12 in Winnipeg. NHL senior vice-president of hockey operations Jim Gregory represented the league. … Hodgson played his 200th NHL regular-season game. … Lack made his 35th start of the season. At the outset of the season, Tortorella indicated he would get 15-20 starts — before anyone knew that Roberto Luongo would be traded. … Buffalo defenceman Alexander defenceman, who was acquired with Hodgson from the Canucks, missed his fifth consecutive game with an upper-body injury. … Sabres starting goaltender Michal Neuvirth, acquired from Washington at the trade deadline, also missed his fourth consecutive contest, with a lower-body ailment. … Neuvirth and Matt Hackett, who dressed as Buffalo's backup, were traded for each other in the 2007-08 OHL season. Neuvirth went to Windsor from Plymouth while Hackett went the other way.