Я решил вопрос конвертацией уже полученных данных через mb_convert_encoding($str, 'iso-8859-1', 'UTF-8');
$doc = new DOMDocument('1.0' 'utf-8'); - действительно не помогает (пробовал до того, как нашёл этот пост).
Но мой вариант скорее всего грузит скрипт, т.к. при больших объёмах перекодировать большие тексты всяко дольше, чем изначально загружать их в правильной кодировке.
Поэтому вопрос остаётся открытым. Может действительно добавлять BOM в начало документа. Надо попробовать.