I finally figured it out.
The string memory clear commands were working. The value only appeared in the dumps because some copies were passed as a parameter or as result of functions.
I rewrote the functions as procedures using the "var" qualifier. Example: procedure DoSomething(var str: shortstring);
Now all functions and procedures work without copying the string, so you can clear it from memory before it goes out of scope.
=== In Brazilian Portuguese ===
Eu finalmente descobri.
Os comandos de limpar a memória da string estavam funcionando. Os valores só apareciam nos dumps porque algumas cópias eram passadas como parâmetro ou como resultados de funções.
Reescrevi as funções como procedimentos, utilizando o qualificador "var". Exemplo: precedure DoSomething(var str: shortstring);
Então, todas as funções e procedimentos funcionam sem copiar a string, sendo possível limpá-la da memória antes que saia do escopo.