env -i executa o comando especificado com um ambiente vazio.
bash -c … executa o argumento da opção -c (o … ) como um trecho de código bash.
bash -c 'echo $SHELL $HOME $USER' é equivalente a echo $SHELL $HOME $USER , porque executar o bash não modifica essas variáveis (pelo menos enquanto elas forem definidas inicialmente).
env -i bash -c 'echo $SHELL $HOME $USER' corre bash com os argumentos -c e echo $SHELL $HOME $USER e com um ambiente vazio. Quando o bash inicia, ele define algumas variáveis do shell, incluindo SHELL (que é definido apenas como uma variável do shell, não exportado no ambiente de qualquer programa filho que o bash possa iniciar). Assim, quando bash analisa e expande o comando echo $SHELL $HOME $USER , as variáveis HOME e USER não são definidas, mas SHELL é definido como /bin/sh (não sei por que bash faz isso), e esse comando exibe /bin/sh seguido por dois espaços.
As aspas simples em torno do argumento bash -c garantem que o texto dentro das aspas não seja expandido pelo shell do qual você executa env -i bash -c '…' , de modo que o texto seja passado como está para o subprocesso bash.