Leeds had secured the try bonus point with four tries inside the opening 16 minutes, but after that were starved of possession and grateful for some outstanding defence to hold on for the win.
Craig Hampson threw a dummy and darted through to open the scoring, Rory Clegg converting.
Hampson then combined with Clegg in midfield and McColl cut a great angle to blast through.
McColl quickly went in for his second after combining with Josh Griffin, Ryan Burrows and Clegg.
The bonus point was secured when Griffin sprinted through untouched. Clegg converted the latter two tries to give his side a 26-3 lead.
Moseley got a foothold in the game and Leeds were twice reduced to 14 men either side of half-time when Lee Imiolek and Dominic Barrow were both sin-binned for professional fouls.
Moseley continued to apply pressure in the second half and got their reward when scrum-half Ryan Glynn took a quick tap from a penalty and raced over. Thomas added the conversion and the home side were back in the game at 26-10. Moseley No 8 Sam Dickinson then went over in the corner from the base, Thomas again converting.
Moseley set up a grandstand finish with a penalty.
However, Leeds managed to finally get some territory in the Moseley half and good tight control from the forwards twice at line-outs earned them a penalty within kicking range and Clegg edged his side two scores in front.
Moseley: Thomas, Hunt, King, Carter, Robinson, Hughes, Glynn, Waller, Wilkes, Evans, Lockley, Powell, Mason, Robinson, Dickinson. Replacements: Warren; Herriott; Lawrence, Voisey; Day; Maggs, Davies.
Leeds Carnegie: McColl, Goss, Griffin, Lucock, D Doherty, Clegg, Hampson (J Doherty, 56), Imiolek (Harris 68), Freer (Nilsen 60), Tussac (Currie 56), Green, Barrow, Baldwin, Walker (Rowan 68), Burrows. Unused replacements: Phillips, Ford.
Referee: Llyr Apgeraint-Roberts.