Присвоить значение или бросить исключение: какая конструкция?
Причина, почему так, как вы хотите, не работает - throw не возвращает никакого значения. Не будет работать даже вот такая простая конструкция:$return = throw new Exception();
Если очень хочется, есть такой вариант - объявить вспомогательную функцию, в которую и обернуть throw (функция по умолчанию будет возвращать null):function throwme($e) { throw $e; }

$data = $this->title_map[$page_type] ?? throwme(new EngineError('...'));
Подробнее можно почитать тут:
stackoverflow.com/a/1211497
P.S.: Идея с конструкцией вроде $var = $test ?? throw new Exception() мне нравится.
Тут нет никакого дублирования, не занимайтесь ерундой. Первый вариант понятен и отлично читается. if (!array_key_exists($page_type, $this->title_map) {
    throw new EngineError('There is no Data for this type.');
};

$data = $this->title_map[$page_type];