A huge pile-up near the front of the peloton in the final kilometre saw almost half the bunch hit the ground and the remnants of the field battle it out for the win.
Bennett jumped clear to pass Maximiliano Richeze (Deceuninck-QuickStep) and Tosh Van Der Sande (Lotto Soudal) who had attacked with 500 metres to go.
“First and foremost, I really hope the guys that came down in that crash are okay," said Bennett. "Today was the first time in a while on this race that the sprinters had an opportunity for a fast finish.
"The win means so much to me. Win number 13: my lucky number."
"I want to say a huge thank you to the guys for working so hard for me. They controlled the race all day and made sure the break didn't make it to the line again on this race.
"Let's hope win number 13 brings even more luck our way. Morale is super high in the team and I'm grateful to everyone for making today's win possible."
Luka Pibernik (Bahrain-Merida), Silvan Dillier (AG2R La Mondiale), Salvatore Puccio (Team Ineos), Harm Vanhoucke (Lotto Soudal), Diego Rubio (Burgos-BH) and Stéphane Rossetto (Cofidis) formed the early break of the day but the six-man move wasn't given much rope by a keen peloton.
The break was caught with 4.5 kilometres remaining with the crash the next point of significance in the race as the sprint trains jostled for position.
Several riders needed medical attention at the scene of the crash including world champion and GC contender Alejandro Valverde (Movistar), with Luka Mezgec (Mitchelton-Scott) going to hospital with a fracture to the iliac crest of his right hip.
The crash ruled out several sprinters and their lead-outs and when Van Der Sande attacked Richeze countered.
The Argentine looked impressive as he closed the gap but he only laid the ground work for Bennett, who latched onto the Deceuninck rider and then came around him before dispatching with both Richeze and the fading Van Der Sande before the line.
Race leader Primoz Roglic (Jumbo Visma) finished with the main field and retained his overnight lead.