I feel like this has become a sort of hobby horse of mine, but CapFriendly doesn't (and possibly can't) accurately model the way that performance bonuses work.
To put it relatively simply, performance bonuses that are reachable count against the cap, even if they have yet to be reached. However, teams are allowed to exceed the cap by up to 7.5% of the upper limit solely due to performance bonuses (this is called the bonus cushion). The way that CapFriendly does things, however, is to pretend that performance bonuses don't count against the cap. For teams whose bonuses total to less than 7.5% of the upper limit, this model works fine. However, that doesn't apply to Buffalo.
7.5% of this year's upper limit is $5.625M. Buffalo's performance bonuses for Eichel, Reinhart and Antipin total $6.35M. So, what this means in practice is that Buffalo has, at minimum, $725k less in usable cap space than what you will see on CapFriendly. This amount goes up if more players with reachable performance bonuses are called up. This is part of the problem Buffalo had last year, as Eichel and Reinhart were eating up the entire bonus cushion. Any time Buffalo called up a player with bonuses (for these purposes, exclusively ELC players, but not necessarily all of them) they had to account for the full cap hit including bonuses not just the cap hit you see on CapFriendly.
An interesting note is that bonus overages don't count as a cap charge for the next season, they actually reduce a team's upper limit for that season. As a consequence, if I am interpreting things correctly, that means a team that had a bonus overage the prior season will have a smaller bonus cushion.