Em libmisc/utmp.c (para o Debian na origem da linha login package) 301 o comentário para setutmp() é:
/*
* setutmp - Update an entry in utmp and log an entry in wtmp
*
* Return 1 on failure and 0 on success.
*/
Na verdade, /var/run/utmp é atualizado primeiro, seguido por gravar o log chamando updwtmp() (se PAM, se usado, o PAM gravar o log). Em ambos os casos
ambas as informações são escritas explicitamente e não são sincronizadas, então o seu ponto 2 não é relevante.
Para encontrar isto em um sistema Debian. Adivinha quem poderia escrever (kernel, login command). A pesquisa utmp e wtmp strings no kernel não dá muita informação. Portanto, use dpkg -S $(which login) para encontrar o nome do pacote de onde login vem e pesquise debian login package no Google. Isso levará você a shadow*.tar.gz nessas fontes. Você encontrará o código que escreve utmp e wtmp .