The idea is nice, but without logic. There is common sense in stock control and ordering: if client comes to your store, and the item has stock available, the client is able to order that stock and this stock should be blocked for him, either the payment process or clarification of details should take few weeks.
If it would happen, that I come to your store, I will see You are selling MacBook Air for $700 and You have two last pieces, I would order that two pieces and they should be blocked just for my order. But if You will wait for my payment (coz I paid by bank money transfer) and set a status "Waiting for client" while the stock is not blocked and somebody else comes after me and see these two Airs as available and do a quicker payment (e.g. via PayPal), it means that while my money is being transferred (that may last for 1-X days) You already sold the items I have ordered. This would mean that you, my dear, are a very unfair, untrustworthy and undisciplined seller.
So, how does the stock controll work in OpenCart is very common (and fair): if You have set in settings that stock is subtracted after order (this is done for each product, respectively, in it's details in administration, tab Data
), after a confirmed order the stock is subtracted (blocked).
And the stock remains subtracted unless You cancel the order from whatever reason (I guess it is exactly Canceled order status - You may check the code to see).
And to Your PayPal Express Checkout - I do not know Your implementation, but I have implemented this few times and always set the order as paid unless an error or refusal comes from PayPal API. Anyway, You are able to create as many payment statuses as You wish and then edit the PP EC implementation to use these statuses, but unless the order is Canceled, the stock should be blocked for that client.