A record Zurich Premiership crowd of 20,840 were at the Madejski Stadium to witness the startling moment which secured the league leaders an unlikely win.
The narrow victory means that Bath retain top spot and keep their distance from defending champions London Wasps, who are in hot pursuit.
London Irish can console themselves with the bonus point, which hauls them above Harlequins on points difference and into fifth-place.
But it could have been so different for the Exiles – home fans thought they had snatched back victory in the ninth minute of injury-time when Barry Everitt struck a drop-goal of his own, but the attempt fell agonisingly wide of the post.
Bath, shorn of eight international players, including Olly Barkley – a late replacement for the injured Paul Grayson against Wales, deserve praise for the way they handed this difficult assignment – and credit must go to their pack which fashioned two tries from driving mauls in each half.
But it was the Exiles who claimed first blood after just nine minutes when Kieron Dawson pounced on an unusually sloppy Bath line-out ball before feeding right-wing Paul Sackey to scuttle over for the first try.
Mark Mapletoft failed with the conversion and missed another chance on 15 minutes, slicing his penalty form just 28 metres out.
The festive spirit in the stands was not shared by the players on the pitch, and home scrum-half Darren Edwards was sent to the sin bin in the 23rd minute for kicking a Bath player. Chris Malone – standing in for Barkley – stepped up to kick the ensuing penalty goal from 40 metres.
Bath fancied themselves up front, and soon opted for the line-out when awarded another penalty in the Irish 22. Their self-belief was well founded as prop Duncan Bell was driven over for the line for an unconverted try.
Mapletoft responded with a penalty to bring the scores level and edged Irish into the lead after Bath No.9 Martyn Wood was sent to the sin bin on 37 minutes for obstruction.
But Malone hit back with a place-kick on the stroke of half-time after Irish forwards were penalised for starting a punch-up just before the break.
Mapletoft returned the favour after the break by slotting a long-distance penalty, but the Bath forwards hit back with another driving maul from a line-out – replacement hooker Lee Mears getting his name on the scoresheet and Malone adding the conversion.
Irish's replacement fly-half Everitt then punished a Bath infringement with a penalty from in front of the posts, but Malone replied in the 80th with the drop-goal that opened up a 21-17 lead.
Bath looked like they had secured the win, but Everitt added another three points from a penalty deep into injury-time to leave the home side just one point adrift. A late drop failed to find the target and Irish luck ran out with the clock.
For London Irish:Try: Sackey Pens: Everitt 2, Mapletoft 3
For Bath:Tries: Mears, Bell Con: Malone Pens: Malone 2 DG: Malone