I am a native Portuguese speaker, and this is the very first time I've ever thought of the difference between tornar-se and ficar. I think I got it. (Ok, eight months afte I wrote this answer I can say that it is broadly consistent with the massive Gramática do Português, Fundação Calouste Gulbenkian, 2013, pp. 1315-8; I’ll just add a little quote further down.)
You use tornar-se if you become a different person; you use ficar to say that you are now in a different, usually temporary, state, but are still the same person as before. Also, tornar-se suggests a slow change, whereas ficar suggests a more sudden change. This article in Veja has more.
(a) Ele tornou-se um médico de classe mundial. If you become a world-class doctor you are in a way a different person from what you were before.
(b) Ele ficou contente depois de ouvir as boas notícias. He got happy. So he is now in a different state, but you would not expect his nature to have changed in a fundamental way.
(c) Ele tornou-se um homem irritável. He aquired an irritable disposition, and now gets angry easily.
(d) Ele ficou irritado com o teu comportamento. He got angry, but did not become an angry man.
(e) Ele tornou-se (um homem) sujo. He became a dirty man (a man who's usually dirty).
(f) Ele ficou sujo. He got dirty.
There is a relationship between tornar-se and ficar and ser and estar. If ele tornou-se something, now ele é ou foi something. If ele ficou something then ele está ou esteve something. So:
(a') Ele tornou-se um médico de classe mundial. E era convidado para conferências por ser um médico de classe mundial.
(b´) Ele ficou contente depois de ouvir as boas notícias. Depois a namorada chegou perguntou-lhe "por que razão estás tão contente?"
(c') Ele tornou-se um homem irritável. E as pessoas evitava-no porque ele era um homem irritável
(d´) Ele ficou irritado. Então a namorada disse "ele está muito irritado, ainda faz algum disparate."
(e') Ele tornou-se um homem sujo. Agora ele é um homem sujo
(f') Ele ficou sujo. A mãe quando o viu disse "estás tão sujo, vai já lavar-te e mudar de roupa."
So, typically tornar-se leads to ser, and ficar leads to estar. But ser and estar don't make any reference to the becoming. The Gramática do Português (Fundação Calouste Gulbenkian, 2013, pp. 1317-8) makes the same point with an example that mirrors my (e) and (f), ele tornou-se sujo/ficou sujo (my boldface):
Note-se também que em a Maria tornou-se triste, o adjetivo é reinterpretado como denotando um estado estável; ou seja, infere-se que, depois da mudança, a Maria é uma pessoa triste; não que está triste (esta última inferência obtém-se de a Maria ficou triste).
[My translation:] Note too that in a Maria tornou-se triste, the adjective is reinterpreted as denoting a stable state; that is, one infers that after the change Maria is a sad person; not that she is in a sad mood (we would make this last inference from a Maria ficou triste).
In some cases both tornar-se and ficar feel natural:
Ele tornou-se/ficou famoso com a publicação do seu último livro. I suppose we're not quite sure whether being famous is an inherent or accidental feature of his.
You can use ficar in place of tornar-se if you're talking of change in degree rather than nature:
Ele tornou-se/ficou ainda mais irritável depois do divórcio.
Fazer-se suggests a slow development, and can often replace, sometimes advantageously, tornar-se: ela fez-se uma excelente profissional.
Pôr-se can replace ficar in some idiomatic expressions where the change is under one's control: põe-te/fica quieto (be still), vê se te pões/ficas bom depressa (make sure you get well soo, said as encouragement to someone who's sick).
Now, I'm pretty sure someone will find exceptions to what I've written. Also, I'm from Portugal, and some of my examples may sound more or less natural to Brazilian ears. But I hope this helps.