Ryan Lamb scored all 16 points as London Irish piled on the misery for Bath.
Lamb’s ‘full house’ of a try, conversion, two penalties and a drop goal was in neat contrast to the scrappy match which went on around him.
But the Exiles will be delighted with the 16-0 win, which cuts Saracens’ lead at the top of the Guinness Premiership table to four points.
The pitch had been covered in recent days but conditions underfoot rapidly deteriorated.
After Lamb had missed with a penalty attempt from 45 metres, Bath swung the ball left and right in the rain without ever looking likely to make any headway.
On 11 minutes, almost inevitably, Nick Abendanon tried to clear under pressure just outside his 22 and Lamb charged down the kick to score, also adding the conversion.
After pushing Bath into the corner with a rolling kick, the fly-half could have added to the lead when Stuart Hooper was spotted throwing a punch, but his penalty kick was wide.
A hospital pass from Ryan Davis to Jack Cuthbert also went unpunished and Bath managed to hold out when Elvis Seveali'i stormed through some weak tackles.
But, after Hooper was guilty of a late tackle, Lamb found the target from 40 metres.
Peter Richards gave way to Paul Hodgson at the break and it was no great surprise when the unhappy Davis was replaced by Nicky Little on the Bath side 10 minutes later.
Having survived a referral to the television match official when Abendanon let John Rudd see rather too much of a ball bouncing over the Bath line, the home side went further behind on 54 minutes as Lamb kicked his second penalty from 40 metres.
The television official again ruled in Bath's favour on 61 minutes when Lamb's grubber kick cannoned off Matt Banahan into Peter Hewat's arms. The ball stuck and the winger sped down the touchline only to be denied by Little, Banahan and Shontayne Hape.
It was a brief respite, though, as Bath's scrummage began to suffer along with the other bits of their game, and Lamb landed a 66th-minute drop goal.
The closest Bath came to scoring was when number eight Luke Watson battled his way to the posts, but the visitors were awarded the scrum put-in and cleared the danger.
Although Bath began to see more of the ball as Irish relaxed their grip in the closing minutes, there was no sniff of a score.