Você pode observar quais eventos são passados para seu diretório com inotifywait
para verificar como se comporta quando o processo está em execução:
$ inotifywait -m .
Setting up watches.
Watches established.
Por exemplo, depois de executar touch file
no mesmo diretório:
$ inotifywait -m .
Setting up watches.
Watches established.
./ CREATE file
./ OPEN file
./ ATTRIB file
./ CLOSE_WRITE,CLOSE file
Como existe um atraso entre a criação e o fechamento do arquivo, você terá um arquivo vazio após o evento CREATE, como você suspeitava. Observe os eventos após a execução:
from time import sleep
with open("somefile", 'w') as somefile:
sleep(15)
somefile.write("...")
Portanto, o uso do evento CLOSE_WRITE parece razoável.