Kilcoyne saves Munster's bacon
Kilcoyne crossed with just three minutes left on the clock, Tyler Bleyendaal adding the extras, as the sides played out a riveting clash at the Liberty Stadium.
The Munstermen returned to the Pro12 summit after the win, moving ahead of Leinster following the latter's 39-10 win over Edinburgh on Friday.
At the Liberty, it was the away side broke the deadlock through Bleyendaal's penalty after three minutes, before the Welsh side roared into life.
Hanno Dirksen immediately reversed proceedings with a terrific cross in the corner with flyhalf Sam Davies converting.
And Kieron Fonotia scored his fourth try in 11 matches when he crashed over minutes later, Davies adding the extras once again as the hosts seized control.
It could have been even worse for Munster, but Ashley Beck's try was ruled out for a forward pass in the build-up.
Davies slotted over another three points as Ospreys threatened to pull away at 17-3, but Bleyendaal bagged three points back for the visitors.
And Jack O'Donoghue crashed over four minutes before the interval to pull Munster back to within one score.
In a frenetic end to the first half, there was still time for the impressive Davies to add his third penalty for the hosts, and the visitors to grab another try through centre Francis Saili, Bleyendaal converting, leaving the score 20-18 at the interval.
The second half started at a more measured pace, with neither side troubling the score sheet until the 60th minute through Davies's penalty.
However, the home side may have extended their lead in the 47th minute, but Beck was again on the wrong end of the video referee, who adjudged the centre was barged into touch before he grounded the ball.
Munster had a try ruled out themselves in the 63rd minute when Bleyendaal sniped and dived for the line, but the TMO ruled he was just short.
The visitors had a sustained period of pressure as they looked to counter Davies's kick, but a resolute Ospreys defence held firm.
The result sees Munster move three points clear on 59, with Leinster on 56 and Ospreys in third on 55. Scarlets occupy fourth place with 49, having swept aside Zebre 49-7 on Friday.
The scorers:
For Ospreys:
Tries: Dirksen, Fonotia
Cons: Davies 2
Pens: Davies 3
For Munster:
Tries: O'Donoghue, Saili, Kilcoyne
Cons: Bleyendaal 2
Pens: Bleyendaal 2
Teams:
Ospreys: 15 Dan Evans, 14 Keelan Giles, 13 Kieron Fonotia, 12 Ashley Beck, 11 Hanno Dirksen, 10 Sam Davies, 9 Tom Habberfield (captain), 8 James King, 7 Sam Underhill, 6 Olly Cracknell, 5 Rory Thornton, 4 Lloyd Ashley, 3 Rhodri Jones, 2 Scott Baldwin, 1 Nicky Smith.
Replacements: 16 Sam Parry, 17 Paul James, 18 Daniel Suter, 19 Tyler Ardron, 20 Dan Baker, 21 Brendon Leonard, 22 Luke Price, 23 Ben John.
Munster: 15 Ian Keatley, 14 Ronan O'Mahony, 13 Francis Saili, 12 Rory Scannell, 11 Darren Sweetnam, 10 Tyler Bleyendaal (captain), 9 Duncan Williams, 8 Jack O'Donoghue, 7 Tommy O'Donnell, 6 Dave O'Callaghan, 5 Billy Holland, 4 Darren O'Shea, 3 John Ryan, 2 Rhys Marshall, 1 Dave Kilcoyne.
Replacements: 16 Kevin O'Byrne, 17 Peter McCabe, 18 Stephen Archer, 19 Dave Foley, 20 Conor Oliver, 21 Abrie Griesel, 22 Dan Goggin, 23 Andrew Conway.
Referee: Marius Mitrea (Italy)
Assistant referees: Claudio Blessano (Italy), Stuart Kibble (Wales)
TMO: Stefano Penne (Italy)
Source: @PRO12rugby