OK, imaginei: o problema está nas diferentes definições do que é TRUE e FALSE entre o status de saída de test e a condição while do loop em awk .
Um comando test postivo resulta em um código de saída de 0 para TRUE e um negativo em 1 para FALSE.
No entanto, em awk , o loop while interpreta 0 como FALSE e 1 como TRUE, portanto, exatamente a definição oposta.
Como exemplo:
awk '{ while ( 0 ) ; { print "0" } }' file
não produzirá nenhuma saída, enquanto
awk '{ while (1) ; { print "1" } }' file
imprime 1 s infinito.
A melhor prática é, portanto, ser explícita em tal combinação
while ( system("command") == 0 )
ou
while ( system("command") == 1 )
respectivamente.
Então, no meu caso
while ( system("test -e " file ) == 0 )
mostra o comportamento esperado.