Yes I think that would explain it. Since the shipping charge is just based on the state selection and that would submit from the form and be reset even after the session expired.
I would just add teh redirect if empty to the confirm page before the checkout process. That is the page the payment button submits to and should do the trick.