Meu C é difícil, mas parece que o bit sujo e gordo é definido quando o superbloco é lido (este confirmar explica por que ele foi implementado da maneira como foi).
O Windows pode optar por não definir o bit até que algo seja alterado no FS, onde o linux adota uma abordagem um pouco mais paranóica de configurá-lo no momento da montagem.
Para mim, parece que é mais eficiente assim, supor sujo depois de montar e descomplicar após desmontar limpo, caso contrário o kernel teria que rastrear o estado sujo / limpo do volume e verificar se ele precisa ser configurado em cada escreva.
Como você pode ver no código e no comentário de commit; você pode montar RO e o bit não será alterado.