I've noted zc156 since I'm chasing an issue on a site with zc156c installed, but the question is still valid for zc157+.

Notice that the zc157c version of the order.php class (lines 312 thru 326):
Code:
    $shipping_module_code = '';
    // A shipping-module's 'code', if present in the session, **must** contain a '_' character, separating
    // the shipping module's name from the selected method, e.g. 'module_method'.  That '_' cannot be the first
    // character of the 'code' value.
    //
    // If that's not the case, issue a PHP Notice and reset the shipping to its unselected state.
    //
    if (isset($_SESSION['shipping'])) {
        if (!empty($_SESSION['shipping']['id']) && strpos((string)$_SESSION['shipping']['id'], '_')) {
            $shipping_module_code = $_SESSION['shipping']['id'];
        } else {
            trigger_error('Malformed value for session-based shipping module; customer will need to re-select: ' . json_encode($_SESSION['shipping']), E_USER_NOTICE);
            unset($_SESSION['shipping']);
        }
    }
... defaults that shipping_module_code to a blank string if the session's shipping information isn't set, which ultimately leads to a 0-value shipping being applied. Can anyone identify a scenario where a valid order doesn't have a shipping selection registered in $_SESSION['shipping']?