Com o sinal -q , o programa grep parará imediatamente quando a primeira linha de dados corresponder.
No entanto, pip ainda pode estar tentando enviar dados para o pipe. Ele receberá um SIGPIPE. E isso faz com que o erro seja traceback.
Com o sinal -i , é possível que o processo grep seja interrompido mais cedo (correspondência anterior), antes que pip tenha terminado de escrever os resultados.
Normalmente, você não deve usar -q em um pipeline como este, a menos que tenha certeza de que o programa na outra ponta possa manipular o SIGPIPE.
Portanto, pip list | grep -i $packagename funcionará sem erros.