The problem is that when the order gets cancelled it is still possible for the customer to pay for the order so the order status changes actually from awaiting payment -> Cancelled due to hold stock time -> pending -> complete (i have a script that automatically changes the order from pending to complete).
The problem when this happens is that the stock for the item is not updated.