Это необходимо когда у товара есть свойство "Цена в долларах" и цену товара в рублях нужно формировать на основе значения этого свойства.
Сейчас приходится задавать цену товара в обработчике события "Bitrix\Catalog\Model\Price::OnAfterUpdate". При этом приходится делать дополнительную работу -- получать текущую цену товара и сравнивать с той ценой, которую мы собираемся установить. Это необходимо делать для того, чтобы не возникала бесконечная рекурсия. При этом, если допустить ошибку в этом обработчике, то бесконечная рекурсия всё равно может наступить и сайт перестанет работать. Это неудобно и опасно.
1) получаю текущую цену товара
2) вычисляю новую цену на основе свойства Цена в долларах
3) сравниваю, не равны ли они (текущая и новая), если равны, то ничего не делаю
4) если не равны, то задаю цену функцией CPrice::SetBasePrice
1) получаю текущую цену товара
2) вычисляю цену на основе свойства Цена в долларах
3) сравниваю, не равны ли они, если равны, то ничего не делаю
4) если не равны, то задаю цену функцией CPrice::SetBasePrice
Что касается вашего обработчика, то на событии OnBeforeUpdate вам нужно просто в любом случае модифицировать цену, не проверяя текущую.