Duplicating shipping details from an Order into a Cart
Simple error on my part. You don't pass the old order's "shippingMethod" model to the new cart's 'setShippingMethod' function. You pass the old order's shippingMethodHandle to the setShippingMethod function.

The following works:

public function actionReorder()
{
    // basic security precautions
        $this-&gt;requirePostRequest();

    // get the current cart
        $cart = craft()-&gt;commerce_cart-&gt;getCart();

    // get the fields passed to us in the form
        $oldOrderNumber = craft()-&gt;request-&gt;getPost('oldOrderNumber');

    // get the 'old' order
        $oldOrder = craft()-&gt;commerce_orders-&gt;getOrderByNumber($oldOrderNumber);

    // set the shipping etc on the cart to the same as the old order
        $cart-&gt;shippingAddressId    = $oldOrder-&gt;shippingAddressId;
        $cart-&gt;shippingAddress      = $oldOrder-&gt;shippingAddress;


        if (!craft()-&gt;commerce_cart-&gt;setShippingMethod($cart, $oldOrder-&gt;shippingMethodHandle, $error)) {
            $cart-&gt;addError('shippingMethod', $error);
            LogicPlugin::log("error adding shipping method to cart: " . $error, LogLevel::Error);
        }

    // ok now pass it all over to the multiAdd controller...
        craft()-&gt;runController('multiAdd/multiAdd');
}