1 - Nas rotinas onde são utilizadas as conversões para lista utilizando o .ToList, não devemos checar se a lista está nula, mas sim vazia para retornar o NotFound.
2 - Na rotina RecuperarCinamas, utilizar a variavel como IEnumerable faz com que a consulta seja executada somente ao chamar o metodo .ToList, pois até este o momento estaria trabalhando sobre a estrutura IQueryable. Com isso seria trazido para memória somente os registros já filtrados.