To prevent an order from changing the stock availability you will have to lock it. the script, however, does not run on unpaid orders unless you run it manually.
In this case, you would need a macro script which locks the unpaid orders.
Create a dummy location which must not used for inventory syncing. Set all channels to download orders into that location. Also, setup rules engine to move orders from this location (it will not run on unpaid orders)
the end result is paid orders in Location one, unpaid in dummy location. When the order is changed from unpaid to paid rules engine will automatically move it location one.