Viktor Gyokeres opened the scoring before Waghorn’s late second at the Coventry Building Society Arena.
Boro have now gone four games without a win after their first defeat to the Sky Blues in nine years.
The first chance of the game fell to the hosts. Jamie Allen broke down the right-hand side but Waghorn fired over the bar.
Neil Warnock’s visitors came close to scoring down the other end, with Uche Ikpeazu unable to get on the end of Norwich loanee Onel Hernandez’s delivery.
And Boro threatened again as Marcus Tavernier’s effort was beaten away by Sky Blues stopper Simon Moore.
After a brief period of defending, City went on the attack.
Waghorn did well to skip past Sol Bamba, a last-minute replacement for former Manchester United player Paddy McNair, but Joe Lumley produced a fine save.
The ball came back into the box and Allen’s effort was deflected wide. Dominic Hyam headed the resultant corner into the side netting.
After a slow spell, Hernandez fired wide of the mark after cutting inside to get a shot off six minutes before the break and Bamba’s overhead kick was kept out by Moore on the stroke of half-time.
Moore made a fine triple save moments after the restart. The keeper kept out Ikpeazu and Hernandez before getting up to deny the Cuban again.
Down the other end Lumley did well to keep out Hyam’s header after he was picked out by Gustavo Hamer’s corner at the back post.
Mark Robins’ City hit the front with 19 minutes to go. Swedish striker Gyokeres raced on to Allen’s through-ball, rounded Lumley and slotted home the opener.
The hosts pushed for a second as Hamer’s free-kick forced Lumley into a decent save.
Boro loanee Andraz Sporar headed against the crossbar but Gyokeres could have put the game to bed when he fired over the bar with 10 minutes to go.
Lumley made another good stop right at the death to deny Gyokeres a deserved second but there was nothing he could do to stop Waghorn getting off the mark.