O que está acontecendo é que xargs coloca (se puder) todos os nomes em uma linha de comando, para que você veja apenas um comando passado para du . Então du ignora os nomes dos arquivos (como você poderia esperar: os arquivos são parte dos diretórios e não os contará duas vezes).
Se você usar um parâmetro -n 1 para xargs , ele dividirá o comando e você verá algo mais conforme o esperado.