The Welshman’s winning 52-metre strike came a minute from time as Leicester triumphed 18-16 just a week after shipping 38 points against the same opponents.
Munster hooker Niall Scannell’s 75th-minute try, which stand-off Tyler Bleyendaal converted, looked to have thwarted Leicester, but Williams struck after visiting flanker CJ Stander was penalised.
Leicester still have it all to do in their quest for a last-eight place, but stand-off Williams’ 100 per cent kicking accuracy relieved pressure.
And it kept Munster two points behind group leaders Glasgow with a game in hand, with Leicester holding third spot, a further three points behind.
Bleyendaal opened his account with a 10th-minute strike after Leicester full-back George Worth was penalised for a late challenge on his opposite number Zebo.
When Munster mounted a first sustained spell of pressure, the Tigers infringed and a second Bleyendaal penalty made it 6-0.
Tuilagi was yellow-carded after a reckless challenge on his opposite number Rory Scannell and as so often happens, it galvanised the team, and Leicester opened their account through a Williams penalty while Tuilagi was still off.
Williams then tied things up with a second penalty, and a tense opening 40 minutes ended all-square.
Bleyendaal and Williams exchanged penalties within 10 minutes of the restart.
Roberts then broke from inside his own 22, and Leicester gained a penalty after Munster prop John Ryan infringed, and Williams’ fourth successful penalty put Tigers ahead.
Zebo was then punished for taking out Thompstone, and Williams once again accepted his opportunity, before the late drama that saw him strike from inside his own half after Scannell crossed to thwart Munster’s victory hopes.