Ótima pergunta, Karolina. O while executa o código dentro do bloco enquanto a condição entre parêntesis for algo que possa ser interpretado como verdadeiro. Isso pode ser um booleano true mesmo ou qualquer outra coisa que quando convertido para booleano dê verdadeiro.
Quando executamos $arquivo = $diretorioAtual->read() o método read retorna pra gente o nome do próximo arquivo no diretório ou false caso não haja mais arquivos, por exemplo.
Além disso, a expressão $arquivo = $diretorioAtual->read() após atribuir o valor à variável $arquivo retorna esse valor também. Isso que possibilita coisas como $mesmoArquivoMasEmOutraVariavel = $arquivo = $diretorioAtual->read(), entende?
Sendo assim, como o valor de $arquivo é retornado, ele é avaliado pelo while e quando ele se torna false a gente sai do loop. :-)
Essa é uma explicação relativamente complexa embora o conceito se torne simples conforme a gente se habitue, então se não tiver ficado claro, só dizer.