Если setResultCacheKeys не вызван в секции startResultCache - ядро сериализует весь $this->arResult в кеш. Зачастую это нежелательно - слишком много лишних данных и тяжелый кеш.
Если в setResultCacheKeys передан пустой массив, ядро не сериализует $this->arResult в кеш. Обычно оно и нужно - данные $arResult вшиваются в шаблон, и результат кешируется.
Если в setResultCacheKeys передан массив ключей, ядро сериализует в буфер только те ветки $this->arResult, чьи ключи ушли в setResultCacheKeys. Если нужно пробросить какие-то конкретные данные через кеш.