Havlat looked to be offside when Jason Spezza grabbed control of the puck at the blue line. But the officials allowed play to continue and Spezza lofted a pass to Havlat, who had split a pair of defenders.
Havlat lifted the puck over goaltender Roman Turek's left pad as he slid to the ice past the right goalpost.
The teams combined for only 43 shots, four apiece in the final period.
Bryan Smolinski had the other goal for the Senators, who avoided their third straight overtime and fifth in eight games. They also leapfrogged the Toronto Maple Leafs -- who play later Saturday -- for first place in the Northeast Division.
The Flames have dropped two straight following a four-game winning streak.