J'ai rencontré exactement le même problème et j'ai perdu près de deux jours à essayer de le comprendre. Cela semble être un bogue dans les mappages EntityFramework pour MySql.
La solution est de déplacer le DateTime.UtcNow calcul en dehors du lambda délimité et branchez la valeur réelle.
var utcNow = DateTime.UtcNow;
query = query.Where(p => p.Published);
query = query.Where(p => !p.StartDate.HasValue || p.StartDate <= utcNow);
query = query.Where(p => !p.EndDate.HasValue || p.EndDate >= utcNow);