Diabate struck in the 89th minute having opened the scoring in the 39th before missing a penalty shortly after the break as Bordeaux lifted their first French Cup since 1987 and claimed a place in next season's Europa League group stage.
Evian equalised through Yannick Sagbo in the 51st, only for Henri Saivet to put Bordeaux ahead again three minutes later.
Brice Dja Djedje levelled again for defiant Evian 20 minutes from time but Mali striker Diabate beat the offside trap to grab the winner for Bordeaux, who lifted their fourth French Cup.
The success salvaged a disappointing season for Bordeaux, who finished seventh in Ligue 1.
"After all, it's a very good season," coach Francis Gillot told French TV channel France 2.
"It's a great relief. We beat a good Evian side."
Evian coach Pascal Dupraz added: "Hats off to Bordeaux, they deserve their victory. We were too naive."
Bordeaux started solidly but Diabate's penalty miss kept unfancied Evian, who ended the Ligue 1 campaign in 16th spot only two points above the relegation places, in the contest.
Diabate opened the scoring when he collected a fine through ball from Mariano and dribbled past goalkeeper Bertrand Laquait before tapping the ball into the net.
The Mali striker went from hero to villain when he missed a penalty two minutes into the second half after being fouled by Milos Ninkovic, with Laquait easily blocking a weak shot.
Sagbo then equalised with a powerful shot from inside the area after being set up by Daniel Wass but Saivet put Bordeaux back in front with a volley from Gregory Sertic's free-kick.
Dja Djedje latched onto a Cedric Barbosa cross at the far post to give Evian renewed hope before Diabate took advantage of sluggish defending to collect a centre from Nicolas Maurice-Belay and beat Laquait from point-blank range to win the cup.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.