Не совсем понял, в чём именно проблема. Если проблема в том, что где-то происходит лишний SetTitle, то решаете это так: лезете в ядро, в метод SetTitle и вставляете в его начало что-то вроде:
AddMessage2Log("SetTitle called with {$title}", "main", 20);
И в логе находите виновника.
Если же виновника обойти нельзя, то можно сделать так: на детальной странице элемента делаете:
$APPLICATION->SetPageProperty("my_custom_h1", "Здесь мой заголовок" );
а в init.php обработчик события OnEpilog:
function myHeaderSetter() {
global $APPLICATION;
$h1 = trim( $APPLICATION->GetPageProperty('my_custom_h1', '') );
if ( $h1 !== '' ) {
$APPLICATION->SetTitle($h1);
}
}
AddEventHandler("main", "OnEpilog", "myHeaderSetter", 10000 );
Вся сложность - в выборе последнего параметра AddEventHandler(), так как "злодей", возможно, тоже работает через это событие