If you want to do that, you need to make sure your regular orders definitely have a shipping cost. You should make sure there is a default shipping method set, and that there is a default country/state set as well, so that all orders have a shipping cost associated with them as soon as an item is added to the cart.
To debug it, try outputting {order_shipping}
directly onto the page instead of the redirect code, and make sure that it returns a non-zero value even for new carts.
EDIT: If you are using the UPS extension it's a bit more difficult, because you can't set UPS as the default shipping method. You will need to check if the cart has a valid shipping method, and if not, reload the page.
First, I would delete any regular shipping methods you have set up (if you are 100% using UPS for shipping).
Then, create a check to make sure the current cart has a shipping method selected before redirecting to the next step:
{if shipping_method == ""}
{field:shipping_method}
<script type="text/javascript">
$("#next-button").click(); // trigger a form submit
</script>
{if:else}
{!-- now we know a shipping method has been selected --}
{if order_shipping_val == 0}
{redirect="Store/Confirm-Order"}
{/if}
{/if}
<input type="submit" id="next-button" />