Più semplicemente io farei così

codice:
$files = glob('./file/*.*');
foreach($files as $file) {
  $name = basename($file);
  $parts = explode('-',$name);
  $pref = trim($parts[0]);
  rename($file,'./file/'.'20'.preg_replace('#(\d{2})_(\d{2})_(\d{2})#','\3_\2_\1',$pref).' -'.$parts[1]);
}
edit. Ho provato il tuo codice ma non riscontro il problema di cui parli. Sicuro che l'errore non sia altrove?