почему бы не сделать этот подзапрос в начале с присвоением возвращаемого значения временной переменной? это не нарушит логику? Возможно, так удастся локализовать проблему.
select count(*) from koshka_work_calendar WHERE type IN («weekend»,«holyday»)
AND country =
country
AND DATE_FORMAT(date,"%Y-%m-%d")=DATE_FORMAT(@datetime,"%Y-%m-%d")