Se você olhar para :help :normal , encontrará
This command cannot be followed by another command, since any '|' is considered part of the command.
Observe também que | não é um canal. É apenas uma maneira de "concatenar" comandos. É como separar dois comandos do shell com ; . Por esse motivo, o intervalo aplicado a um comando não é transferido para comandos subsequentes.
A alternativa mais próxima que eu posso pensar em não envolver uma função personalizada ou algo assim é usar :substitute e re-especificar o intervalo:
:'<,'>s/#/\t\t\t#/ | '<,'> !sort -f