La razón por la que no devuelve nada es porque Doctrine escapa de la expresión:el SQL generado es
WHERE (date > 'DATE_SUB(CURDATE(), INTERVAL 7 DAY)')
en lugar de
WHERE (l.action_time > DATE_SUB(CURDATE(), INTERVAL 7 DAY))
Podría forzarlo a que funcione así:
$date = new Doctrine_Expression('DATE_SUB(CURDATE() , INTERVAL 7 DAY)');
$q->where('date > ' . $date);
Sin embargo, esta no es la opción más segura, ya que la entrada no se escapa y no es una buena práctica...