События срабатывают, только при вызове API методов (Например: Add, Update)
т.е. если разработчик сделал изменение активности в обход и забыл вызвать ExecuteModuleEventEx() для Вашего OnBeforeIBlockElementUpdate, то изменение не вызовет события.
Но так делают редко, но делают. Например:
Используют UpdateList() - он обновляет элементы, но не вызывает Event (битрикс так и говорит об этом методе Update list of elements w/o any events)
или хардкорный
UPDATE `имя базы`.`b_iblock_element` t SET t.`ACTIVE` = 'Y' WHERE t.`ID` = id_элемента
событие не сработает.
Поищите аномалии в коде.