O Problema
Se você adicionar um controle dinamicamente na pagina, digamos (ControlA), e o viewstate de controle estiver ativado, e no próximo postback você adicionou um controle diferente (ControlB) com a mesma chave.
Quando o asp.net tenta carregar a viewstate do controle contido antigo, ele vai esperar o ControlA, mas ele vai encontrará outro (ControlB) e isso "Vai dar o erro".
É importante você também o evento no qual os controles dinamicamente estão sendo adicionado.
Se adicionar controles aos eventos que ocorrem após o carregamento, eles farão parte do estado de exibição que você envia ao cliente. Você precisará adicionar esses controles novamente antes de LoadViewStateser chamado.
Consulte o ciclo de vida da página asp.net
Solução
Não adicionar controles diferentes em cada post da pagina. Criar todos os dipos que voce precisa, e mudar sua se está visibel ou não.
Ou você pode definir EnableViewState=false no controle que não precisar do viewstate