Du könntest das Array umdrehen, durchlaufen und bei dem ersten Vorkommen des gewünschten Schlüssels das Element in eine Variable übernehmen und die Schleife verlassen:
$s = false;
foreach(array_reverse($array) AS $v)
if(!empty($v['datePublished']) && $s=$v)
break;
Siehe Demo