This isn't a bug in the cart it is a bug in the way you are setting up shipping.
in the cart page, you are dynamically setting the name of the priority form element based on the quantity in the cart:
input name="upgrade<?php echo $eCart1->DisplayInfo("Quantity"); ?>" type="radio" value="priority<?php echo $eCart1->DisplayInfo("Quantity"); ?>" id="priority<?php echo $eCart1->DisplayInfo("Quantity"); ?>" />
this means that if the quantity in the cart is 1, the form element is named "upgrade1", you are then setting a session named upgrade 1 and using that for the shipping, doesn't matter if you change the quality, it will still be named upgrade1 when you clic the update button.