Americans Hank Kuehne (68) and Robert Damron (67) finished one shot back at 15-under 269 with compatriot Wes Short Jr (66), overnight leader J.L. Lewis (72) and defending champion Mark Hensby (64) of Australia one stroke further adrift.
A PGA Tour rookie, O’Hair holed a nervy 5-foot par putt on the last and then watched from the scorer’s hut as Lewis collapsed over the final two holes.
Lewis, who held a three-shot advantage when the day began, was tied for the lead with two holes to play but a bogey-bogey finish left the 1999 winner with a one-over 72.
Kuehne had a chance to force a playoff but his 20-foot putt from just off the green fell short.
Hensby mounted a determined final day charge, his 64 including five birdies in his first seven holes.
Todd Hamilton will head to St Andrews for the defence of his British Open crown on a positive note, returning a final round three-under 68 to post his best result this season in a tie for 13th at 11-under 273.
Leading final round scores (US unless stated):
268 — Sean O’Hair 66, 69, 68, 65.
269 — Robert Damron 65, 68, 69, 67; Hank Kuehne 68, 66, 67, 68.
270 — Mark Hensby (Australia) 70, 66, 70, 64; Wes Short Jr 66, 67, 71, 66; J.L. Lewis 64, 65, 69, 72.
271 — Hunter Mahan 63, 68, 74, 66; Shigeki Maruyama (Japan) 68, 63, 72, 68; Richard Johnson (Sweden) 65, 68, 68, 70.
272 — Kevin Stadler 72, 63, 69, 68; D.J. Trahan 68, 69, 67, 68; Jeff Brehaut 66, 70, 66, 70.
273 — Esteban Toledo (Mexico) 70, 67, 69, 67; Todd Hamilton 68, 67, 70, 68; Matt Kuchar 71, 67, 67, 68; Jonathan Byrd 70, 69, 70, 64; Heath Slocum 68, 69, 67, 69; Carlos Franco (Paraguay) 68, 68, 67, 70; Craig Bowden 65, 68, 68, 72.
274 — Robert Gamez 74, 65, 67, 68; Joey Sindelar 70, 69, 69, 66; Justin Bolli 69, 66, 73, 66; Garrett Willis 66, 72, 68, 68; Ryan Palmer 66, 68, 74, 66; Brendan Jones (Australia) 66, 73, 66, 69; Phillip Price (Britain) 69, 69, 67, 69; Brandt Jobe 66, 66, 72, 70; Woody Austin 72, 65, 68, 69.—Reuters