Em:
a=$(cmd)
Esse é um comando simples sem parte de comando, então o status de saída é o da substituição do comando. Em:
a=$(cmd) export a
ou
export a="$(cmd)"
Há uma parte do comando aqui (mesmo se em alguns shells, export está no meio do caminho entre um comando e uma palavra-chave), portanto, seu status de saída é retornado. Se cmd falhar e não produzir saída export a= ainda será executado e bem-sucedido, então export retornará um status de saída 0.
Aqui você deseja:
a=$(cmd)
export a
Ou, melhor ainda, livre-se desse set -e não confiável e faça o tratamento adequado de erros manualmente:
a=$(cmd) || exit
export a
Ver, por exemplo, BashFAQ 015: "Por que não define -e faz o que eu esperava?" para exemplos adicionais de por que e como set -e pode produzir resultados inesperados.