Since you only want the levels current at the time the invoice is created or at specific points in time where the status changes, you could use a script to capture the current values and store them in simple number fields that are shown on your layout. This would allow you to use scripts and buttons to either refresh current inventory levels for the entire invoice or just a single line item.
Is there any way to do it per product in the product detail layout?
Should be possible with the same basic approach. You basically copy the calculation field's expression to your clipboard and use it as the second parameter of a set field script step. To update multiple records this way, you use a loop to step through the records updating them one at a time.
I'ts also theoretically possible to add and subtract numbers from a number field in your products table to maintain current a current inventory level, but this requires careful scripting to make sure that this works correctly in all situations--especially in situations where you might have two or more users attempting this update of the same product at the same time. (One user can lock the record--keeping the second user's script from correctly updating the field.)