In most cases these two words mean exactly the same. "dreckig" has more of a connotation in the sense of morally wrong, mean or of low quality while "schmutzig" at least to my ears refers more to something that is dirty in a physical, often unnatural way. Some collocations prefer either of these words or derived forms. For example:
ein dreckiges Lachen = a laughter that conveys little empathy and can be rather condescending
Was für ein Dreck! = I really don't like this! (independent of its state of cleanliness)
der Dreckskerl = a bad person (often used to talk about former boyfriends ;-))
der Schmutzfink = some one who tends to get himself dirty all the time (often children) even if he is a good person