They both mean to wait before doing something, but I thing in general use, "hold on" means to stop something that you are about to do right now where as "hold off" means to put off for quite a while something that you were going to do sometime soon but not necessarily immediately. That is, "hold on" is a more immediate command.
Also, because of the immediacy, "hold on" is usually said in a more urgent way than "hold off".
So a conversation might go like this:
A: I'm going to shoot that guy right now
B: WHOA. Hold on!
A: What, you don't want me to shoot him?
B: Well, maybe, but let's hold off on that until we find out for sure if he's who we think he is.