Despite twice taking a commanding lead, with Christian Cullen scoring his first try, Munster suffered a worrying lack of concentration at Sardis Road just a week to go before their Heineken Cup quarter-final.
The only positive was they came through a tough game with a clean bill of health after the return of key players from international duty and injury.
Munster silenced the home support by storming into an early lead through Jason Holland. The outside-half kept his cool to strike an early penalty and minutes later made the break on 11 minutes to score the opening try.
Mullins had taken Munster upfield with a searing break through the middle, before Cullen was brought down short, and then linked up neatly with Holland from the ensuing scrum to open the defence for the out-half to stretch over and score.
Munster's domination continued, particularly through Jim Williams at the lineout, providing the launch pad for a series of attacks, but they were made to pay for failing to take their chances after Paul O'Connell was held up over the line and Anthony Horgan had a try disallowed for a forward pass.
The first-half turned on a moment of madness from O'Callaghan who was sent to the sin bin to cool off for a stamping that sparked a brawl with Warriors' Gethin Jenkins.
The Wales prop, back on his usual loose-head side, was the Warriors outstanding player, causing Gordon McIlwham problems in the scrum and then he rubbed salt into O'Callaghan's wounds by crossing for a try a minute after his departure.
Munster steadied the flow after Ceri Sweeney had levelled the scores with the conversion and a penalty and regained the lead through Horgan, who strolled over from Mullins' darting break. Yet they still managed to go in at the break trailing their hosts 16-15.
The second-half was almost a carbon copy of the first with Munster subduing the home side's enthusiasm by stealing a march early on and again Mullins was the architect. The powerful centre carved open the defence, this time off Holland's inside pass, and found Cullen in support for his first Munster try after 51 minutes. Holland struck the conversion from in front of the posts and 10 minutes later added a penalty to edge Munster 25-16 ahead.
But just as they had done in the first-half, Munster stepped off the gas and allowed the Warriors, marshalled by replacement Neil Jenkins, to creep back into the game. Richard Bryan profited from their dominance at the scrum with a push over score after 63 minutes. Munster had a glimmer of hope when Richard Parks was sin-binned midway through the second half, but failed to make the chance count as Sweeney slotted two late penalties to steal the win.
: K Morgan, G Wyatt, S James (N Jenkins, 55), J Bryant (N Jenkins, 37-40), R Mustoe (A Havili, 74), C Sweeney, G Cooper, G Jenkins, M Rees (M Davies, 63), C Horsman (M Jones, 52), B Cockbain (D Jones, 70), R Sidoli, R Parks, R Bryan (R Jones, 45-50), C Harris.
: Tries: G Jenkins, R Bryan. Cons - C Sweeney (2). Pens - C Sweeney (5).
: C Cullen; J Kelly, M Mullins, R Henderson, A Horgan; J Holland, E Reddan (F Murphy, 74); F Roche (R Callaghan, 67), J Flannery, G McIlwham, D O'Callaghan, P O'Connell, J Williams (capt), A Foley, D Wallace.
: Tries - J Holland, A Horgan, C Cullen. Con - J Holland (2). Pens - J Holland (2).
: Andy Ireland (Scotland).