"Мне надо" means that "I have a need to do something". For example: "мне надо поесть", "мне надо поспать", etc.
"Я должен" is more like "I am obliged" or "I have to do something". For example: "я должен идти на работу", "я должен вернуть долг". "Быть должным" also means to owe something to someone: "я должен другу 100 рублей".
This rule isn't strict, though, and quite often these two words can be used interchangeably.
It's useful to remember, though, that the word "надо" is derived from "надобность" (need), whether "должен" is derived from "долг" (debt).