Quando fazemos...
inflater.inflate(R.layout.list_item, parent, false);
... estamos dizendo:
"Transforme o XML list_item numa View e use o parent como referência para propriedades como layout_width="match_parent" que estiverem na primeira tag daquele XML. Porém, não quero que essa View criada seja adicionada como filha de parent."
Quando estamos num adapter e fazemos esse inflate para cada linha não queremos que a linha seja adicionada direto ao parent pois quem faz esse trabalho é o próprio adapter, quando retornamos no getView essa View inflada.
Se no momento do inflate passarmos true, a View criada já será adicionada como filha do parent e, quando o adapter pegar essa View e tentar adicionar novamente ao mesmo parent termos um erro do tipo: "A View já tem um pai".
Passar true no momento do inflate faz sentido quando estamos construindo um layout de forma programática, mas combinando (ou reaproveitando) layouts já escritos em XML.