Troy Terry, Adam Henrique and Simon Benoit scored for Anaheim. Anthony Stolarz made 25 saves in his third start of the season.
Ryan Getzlaf collected an assist, his 987th career point, to move within one point of matching Teemu Selanne for the Ducks' all-time scoring lead.
The Sabres opened the scoring late in the first period. Kyle Okposo took a long shot from the above the right faceoff circle, but Stolarz couldn't corral the rebound, which bounced right to Zemgus Girgensons for the backdoor goal.
Despite directing 17 shots on net in the first period, the Ducks couldn't solve Buffalo netminder Craig Anderson and the Sabres held a 1-0 lead after 20 minutes.
Two Buffalo goals early in the middle frame, just 97 seconds apart, gave the visitors a commanding lead.
The Sabres struck first on the power play as Asplund hammered a one-timer past Stolarz for his second goal of the season.
Less than two minutes later, Anders Bjork raced down right wing, firing a shot off Arttu Ruotsalainen's glove and by Stolarz to give the Sabres a three-goal cushion.
"First period was inconsistent, had some great shifts and some not great shifts," Eakins said. "As the game went on, we got better and better."
Terry got the Ducks back in the game, finishing off a setup feed from Getzlaf. With the teams skating four-on-four, Getzlaf attacked the Buffalo line with speed before curling towards the middle of the ice and spotting Terry sprinting down right wing. Getzlaf led his winger towards the net and Terry did the rest, lifting a shot over Anderson's shoulder to bring the Ducks back within two.