I don’t think there are strict rules on this, as they are heavily used in oral languages.
Below are my thoughts, please forgive my poor English:
完 vs 到 完 means some actions are finished, while 到 means a action is taken and a target is reached, some consequences occured etc. Usually if you can use “finish” in English, you can use 完 otherwise, use 到.
我做完家事了 – I have finished my houseworks.
我做家事做到累了 – I was doing houseworks until I’m tired. (But I didn’t say I finished it)
This one is not that obvious:
說完他的故事之後… – After talked about his story…
一說到他的故事… – Once talked about his story…
不了 VS 不能 VS 不會 不了actually means the target of action can’t be reached. 不能means an action can’t be taken and 不會 means an action won’t be taken.
壞人跑不了 – The bad guy can’t run away <because he will be caught some day?>
壞人不能跑 – The bad guy can’t run <because he hurt his foot?>
壞人不會跑 – The bad guy won’t run (away) <because he has something else to do?>
Confuse1 不了 VS不能
我吃不了這麼多 – I can’t eat that much <Because it’s really too much>
我不能吃這麼多 – I can’t eat that much
Confuse2 不能VS不會 (不會 can also mean “don’t know how to do”)
我不能說英文 – I can’t speak English <Because I’m practicing my Chinese>
我不會說英文 – I can’t speak English
掉 means an action is taken that result in a loss/expiration etc. Note that most of the time you can replace 掉 with another verb ending (sometimes even omit it). 掉 just signifies the loss/expiration.
我喝掉了一瓶酒 – I have drank a bottle of wine.
The classical usage. Actually you can replace 掉 here with 完, if you still remember its definition. But 掉 really means a bottle of wine is expired. If the wine belongs to your father and you didn’t ask him before drank it, you better use 掉 to admit it’s your fault!
把垃圾丟掉 – throw the garbage away
Here 掉 does not mean “away”, but means “one is relieved from garbage.”
Hope I didn’t create more confuses