You can slightly simplify conditions. This should be the same as you wrote in your question:
date_started < period_end
AND (date_ended is null OR date_ended >= period_start)
and yes, no more BETWEEN issue too :)
If you don't have a lot of data, then you can even do like this and get rid of OR
completely. But keep in mind, that ifnull(date_ended) will not use indexes and probably will work slower (check execution plan of SELECT):
date_started < period_end
AND IFNULL(date_ended, period_start) >= period_start