Ho riscontrato lo stesso identico problema e ho perso quasi due giorni cercando di capirlo. Sembra essere un bug nei mapping di EntityFramework per MySql.
La soluzione è spostare DateTime.UtcNow calcolo al di fuori dell'ambito lambda e inserire il valore effettivo.
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);