Como pv é apenas uma ferramenta de monitoramento, acho que é um programa de thread único que usa IO síncrono. Se a entrada e a saída estiverem sendo executadas em taxas diferentes, ela preencherá e esvaziará seu buffer para evitar a aceleração, mas se um dos canais estiver completamente paralisado (no seu caso, split não aceitará entrada), a segunda instância pv irá parar na chamada write também. Então, gzip tentará produzir mais dados, estourar o buffer de tubulação e também parar, e assim por diante até que todo o pipeline pare.
Tente usar buffer em vez de pv e veja se isso ajuda. buffer gera dois processos (um para entrada e outro para saída) e deve manter o pipeline funcionando mesmo se a saída estiver completamente paralisada.