Следующее должно делать то, что вы ищете - оно сначала заказывает по дате, измененной, если она есть, и прикрепляет все без даты, измененной в конце, и упорядочивает их по дате создания.
SELECT *
FROM MyTable
WHERE (datecreated < getdate() - 7)
OR (datemodified IS NOT NULL AND datemodified < getdate() - 7)
ORDER BY coalesce(datemodified, '1/1/9999', datecreated)
Редактировать
Я думаю, что неправильно понял набор результатов, который вы хотите. Если вы хотите, чтобы возвращалась только одна дата, то есть дата, модифицированная или созданная по дате, тогда вы выбираете следующее:
SELECT coalesce(datemodified, datecreated)
FROM ....