The Scotland international's 40th minute strike was enough to separate two sides seeking their maiden win of the new league season.
The three points lifted Killie off the bottom of the table, where they were replaced by their hosts.
Almost instantly, St Johnstone responded with an attack of their own but Chris Kane's header was too weak to trouble Laurentiu Branescu in the visitors' goal.
Both sides struggled to gain the upper hand in midfield, where the battle for supremacy was fierce.
St Johnstone had the ball in the net in the 34th minute as Michael O'Halloran bravely nodded in a flick on before being felled by Branescu.
However, the assistant referee came to the aid of Killie with an offside flag.
And with five minutes left in the first-half, the visitors took the lead.
Saints botched a free-kick at one end as Scott Tanser sent his effort weakly into the wall and Killie countered swiftly.
Liam Millar drove forward at pace for 60 yards and into the Saints box. His cutback only found home defender Liam Gordon but a ricochet fell kindly for O'Donnell and the full-back forced the ball home from six yards out.
Having established a lead, Kilmarnock were content to sit back and defend their advantage.
St Johnstone were allowed plenty of possession but could not carve out any meaningful goalmouth chances.
O'Halloran fired one long-range effort just over the bar but it was as close as they got to the target as the Rugby Park side held firm.
Saints manager Tommy Wright finally called for May as he introduced the returning hero from the substitute's bench in the 67th minute.
But the new signing had little opportunity to get his side back into the game as time ticked away.
Ali McCann whistled a drive high and wide as the Perth outfit continued to probe for an equaliser.