As reported by @lindenb on this tweet, some piped commands should share the number of available CPUs instead of taking each of them all the CPUs. As proposed by @ewels on the modules slack channel, the easiest solution is to assign the CPUs to each piped command with something such as floor(task.cpus /2).
Affected modules:
[ ] bowtie/align
[ ] bowtie2/align
[ ] bwa/mem
[ ] bwamem2/mem
[ ] bwameth/align