I've sorted the problem by simply making the following change to the weight calculation?
/// <summary> /// Gets shopping cart weight difference is this will not include any items which are flagged with free shipping /// </summary> /// <param name="cart">Cart</param> /// <param name="customer">Customer</param> /// <returns>Shopping cart weight</returns> public static decimal GetShoppingCartTotalWeight(ShoppingCart cart, Customer customer) { decimal totalWeight = decimal.Zero;