В модели квотирования и адреса доставки кешируется несколько вещей, поэтому вы должны сделать это, чтобы Magento пересчитал итоги, если вы изменили количество предметов или доставку:
$quote->setTotalsCollectedFlag(false);
$quote->getShippingAddress()->unsetData('cached_items_all');
$quote->getShippingAddress()->unsetData('cached_items_nominal');
$quote->getShippingAddress()->unsetData('cached_items_nonnominal');
$quote->collectTotals();
Это сработало для меня. Обычно Magento перенаправляет клиента в корзину или на другую страницу после любого изменения котировки, поэтому обычно приходится рассчитывать итоговые значения один раз на загрузку страницы.