Eu descobri o que está acontecendo. Parece que você pode renomear e mover (dentro da mesma partição) arquivos executáveis e DLLs que estão em uso, mas não podem excluí-los. (quando este recurso foi introduzido?) Duas coisas que tornam confuso são a mensagem de erro ("Acesso negado" em vez de "está sendo usado por outro [processo]"), e que os módulos movidos / renomeados ainda estão listados em seus nomes originais no Process Explorer, e é por isso que não pude usá-lo para descobrir qual processo estava usando os arquivos. (foi o Adobe Reader, que o instalador não desligou enquanto fazia seu trabalho)
Gostaria de encontrar a documentação adequada (da Microsoft) referente a esse comportamento. A Wikipedia tem um parágrafo que encontrei aqui :
DeleteFile mencionaAny file that is executing on the computer system as a program (e.g., an EXE, COM, DLL, CPL or other binary program file format) is normally prevented by the file system from being opened for write or delete access, reporting a sharing violation, despite the fact that the program is not opened by any application. However, some access is still allowed. For example, a running application file can be renamed or copied (read) even when executing.
The DeleteFile function fails if an application attempts to delete a file that is open for normal I/O or as a memory-mapped file.
O último presumivelmente inclui executáveis / DLLs carregados.
A Microsoft também tem uma página " Atualizações da biblioteca de vínculo dinâmico " que meio que implica esse comportamento, mas não o documenta adequadamente.