Dennis posted the best provisional best time at the intermediate checkpoint before closing out the 10km out and back course with an average speed of 53.412km/h to stop the clock in a time of 11min 14sec.
He then stayed put as the rider in the hot seat to beat Jos van Emden (LottoNL-Jumbo) by four seconds with Jonathan Castroviejo (Sky) another four in arrears.
"I was looking at the best times on this course and thinking 'ok what do I need to aim for? I knew I needed to try and go faster than last year to win and I was right because Jos Van Emden did the same time that I did last year," Dennis said.
"So, if I hadn't beaten my time he would have won. I'm just happy I won today. It is a good confidence boost going forward."
The overall victory went to Michal Kwiatkowski (Sky) who fended off Damiano Caruso (BMC) and his Sky team-mate Geraint Thomas.
“I was very nervous when I was warming up because it was raining," Kwiatkowski said. "I was scared that something would go wrong and I’d have to go a bit slower in the corners. But I had good feelings and that’s how I could finish it off so well.
"Tirreno-Adriatico is the most important stage win in my career so far. This is a beautiful race with a beautiful trophy. It’s also one of the hardest stage races to win.
"It’s been a difficult week for Team Sky. We had some bad luck with Geraint Thomas but, at the end of the day, we were really motivated to have a very good race. We did it.
"The trident trophy gives me a wonderful feeling. I’m confident in Team Sky to support me to try and win Milan-Sanremo again on Saturday.”
Jacopo Mosca (Wilier Triestina-Selle Italia) won the points classification while the king of the mountains was Nicola Bagioli (Nippo-Vini Fantini-Europa Ovini) and Tiesj Benoot (Lotto Soudal) emerged as the best young rider.