Ошибка связана с тем, что при изменении корзины (в какой-то части сайта) происходит привязка корзины к "виртуальному заказу", например вот так (удалении позиции из заказа):
[CODE]$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), SITE_ID);
$order = \Bitrix\Sale\Order::create(SITE_ID, \Bitrix\Sale\Fuser::getId());
$order->setBasket($basket);
$basketItem = $basket->getItemById($_REQUEST["ID"]);
$result = $basketItem->delete();
$result = $basket->save();
[/CODE]без разницы что с корзиной делается - удаляется, добавляется или изменяется.
главное тут $order->setBasket($basket) - корзине устанавливается привязка к ещё не сохранённому заказу (по сути пока "вирутальному").
как только корзину к такому заказу привязали и выполнили $basket->save() - сразу в БД в таблице резерв по позициям корзины записывается.
при этом заказ то по факту не сохранён.
ну а при следующей попытке изменения корзины (а точнее удаления из неё хоть чего-нибудь) срабатывают обработчики ядра битрикс, которые видят что по позиции в БД зафиксирован резерв и идёт попытка удалить этот резерв в полной уверенности, что резерв был сохранён с заказом, а заказа нет.
вот отсюда и ошибка.
в итоге:
1) нужно найти на сайте все участки кода, где происходит $basket->save() и убрать привязку к виртуальному заказу, чтобы резерв в БД не лился при сохранении корзины.
2) в таблице b_sale_basket_reservation удалить все записи по позициям корзин, ещё не привязанных к заказам.