The main difference is that a SPAN normally is reserved for a small chunk of text, such as highlighting or emphasizing. A DIV, can do that, but is used more as a container of other HTML elements.
They are often used interchangeably. Mainly it comes down to how "correct" you want your HTML code to be.
For example, you may want to float a block of HTML always on top or on the left. While you can do this with a SPAN, convention is to use a DIV