Почему-то в документации этот момент упущен, ну, или я просто не нашёл.

Разберём на примере сущности инфоблока — класса \Bitrix\Iblock\IblockTable.

Код обработчика для события OnBeforeAdd

Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'iblock',
    '\Bitrix\Iblock\Iblock::OnBeforeAdd',
    function (\Bitrix\Main\Event $e) {
        // some code
        echo '<pre>';print_r($e->getParameters());echo '</pre>';
    }
);

Да, всё на самом деле вот так просто :-) Единственный ньюанс — так это суффикс Table у класса, который в вызове обработчика не используется.

Список доступных событий всех сущностей:

namespace Bitrix\Main\Entity;
 
abstract class DataManager
{
    const EVENT_ON_BEFORE_ADD = "OnBeforeAdd";
    const EVENT_ON_ADD = "OnAdd";
    const EVENT_ON_AFTER_ADD = "OnAfterAdd";
    const EVENT_ON_BEFORE_UPDATE = "OnBeforeUpdate";
    const EVENT_ON_UPDATE = "OnUpdate";
    const EVENT_ON_AFTER_UPDATE = "OnAfterUpdate";
    const EVENT_ON_BEFORE_DELETE = "OnBeforeDelete";
    const EVENT_ON_DELETE = "OnDelete";
    const EVENT_ON_AFTER_DELETE = "OnAfterDelete";

Обновлено 30.05.16

Покажу так же пример подписки на события highload-блоков. Например, наш highload-блок назван Color. Чтобы подписаться на событие, вызываемое до обновления его записи, и, запретить добавлять элементы без заполненного поля XML_ID, хватит кода:

<?php
 
if (Bitrix\Main\Loader::includeModule('highloadblock')) {
 
    $hlColorIterator = Bitrix\Highloadblock\HighloadBlockTable::getList([
        'filter' => [
            '=NAME' => 'Color'
        ]
    ]);
 
    if ($hlColor = $hlColorIterator->fetch()) {
        /** @var \Bitrix\Main\Entity\Base entity */
        $colorEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlColor);
 
        Bitrix\Main\EventManager::getInstance()->addEventHandler(
            '',
            $colorEntity->getName() . 'OnBeforeUpdate',
            function (Bitrix\Main\Entity\Event $event) {
                /** @var \Bitrix\Main\Entity\EventResult $result */
                $result = new Bitrix\Main\Entity\EventResult();
 
                $data = $event->getParameter('fields');
 
                if (!strlen(trim($data['UF_XML_ID']))) {
                    $result->addError(new Bitrix\Main\Entity\FieldError(
                        $event->getEntity()->getField('UF_XML_ID'),
                        sprintf('Field "UF_XML_ID" required.')
                    ));
                }
 
                return $result;
            }
        );
    }
 
}