Tu codigo tiene muchos errores por varios lados.
Para eliminar varios al mismo tiempo te aconsejo utilizar la clase TList en vez de array dinámico.
Por otro lado al asignar los elementos tienes:
Código Delphi
[-]Value := TColumnaDict.Create;
try
AnadeValores(Value, 'uno', 'el uno', false);
AnadeValores(Value, 'dos', 'el dos', true);
FColMant.AddColumna(Value);
finally
Value.Free;
end;
aca lo que estas haciendo es crear el objeto TColumnaDict asignarle valores y agregarlo a FColMant, hasta aca todo bien, pero luego lo destruyes !!!
Tienes que entender que Delphi al pasar objetos como parametros no crea una nueva instacia (copia) de ellos, sino solamente pasa el puntero, por lo que el objeto sigue siendo el mismo, asi que al destruirlo, destruiste el objeto que pasaste.
Donde obtienes el error es porque intentas de volver a destruir el objeto ya destruido