Não, eu já tinha fechado esse while.
Mas julgo que descobri o problema
Nesta linha, tinhas isto assim:
$html = preg_replace('/thumbnails\.php\?album=(\d+)/i', $replace, $html);
O problema é que a primeira vez que esta linha era executada, fazia o replace de todas as "ocorrencias", independentemente de ter o id "certo" ou não. Aliás, o loop assim só seria executado uma vez, já que o preg_match_all não encontraria mais nenhuma correspondencia. Ou seja, só vamos querer que o preg_replace seja executado uma vez. Por isso, temos de acrescentar mais o parâmetro ao preg_replace indicando que o número de replaces é só 1.
$html = preg_replace('/thumbnails\.php\?album=(\d+)/i', $replace, $html,1);