Hola,
ambas son un contenedor de elementos pero:
div sirve para alinear contenidos y span no lo hace
Usándolos como capas funcionan igual salvo por un detalle importante: una capa creada mediante div no se queda dentro de un párrafo (al cerrar </div> genera un cambio de párrafo). En cambio una capa creada mediante span puede permanecer "en línea" dentro de un párrafo (cierras </span> y puedes continuar en la misma línea)
Para muestra un botón
<span>pepe </span>perico de los palotes
<div>pepe </div>perico de los palotes
La primera se mostrará en una sola línea
La segunda se mostrará en 2