I changed the date comparison to be based on year alone:
extract(YEAR FROM sc.taken_start) >= 1900 AND extract(YEAR FROM sc.taken_end) <= 2009 AND
The indexes are now always used; if someone wants to explain why using the numbers works (a constant) but using a date (another constant?) does not work, I'd really appreciate it.