Алексей Иванчук, в коде вы оперируете $propertyCollection, который возникает из ниоткуда.
Давайте разберем Вашу логику.
0) Вы подписываетесь на событие OnSaleOrderBeforeSaved (перед сохроанением заказа)
1) На вход функции поступает переменная $event, несущая в себе экземпляр Bitrix\Main\Event
2) Из $event Вы получаете все параметры ($parameters) получая методом getParameters() на объекте $event
3) Из $parameters по ключу ENTITY Вы получаете $order
До этого момента все казалось бы логично.
Затем внезапно появляется $propertyCollection, на котором Вы пытаетесь вызвать метод getItemByOrderPropertyId, яро полагая что у пустоты есть этот метод (как бы не так)) и после - вызываете метод сохранения, зацикливая события само на себе.