Most shops won't take an item off the shop floor without at least a deposit. You should probably practice a similar thing on your site. It's up to the person to pay before the item is removed form stock.
You can get round the out of stock problem by rechecking the availability at the transfer form cart to payment page and also after payment completes. You then error handle what should happen should the item just have sold out - e.g. tell the user that it's just sold out that minute, offer them a chance to pre-order or reserve new stock, tell them when the stock is due back in.
Taking items out of stock that haven't been sold is just asking for problems.