What I ended up doing was to write the SQL with datepart logic
var query = new QueryDefinition(
"SELECT * FROM c WHERE (DateTimePart('mm', c.birthday) = @todayMonth AND DateTimePart('dd', c.birthday) >= @todayDay) " +
"OR (DateTimePart('mm', c.birthday) = @next30DaysMonth AND DateTimePart('dd', c.birthday) <= @next30DaysDay) " +
"OR (DateTimePart('mm', c.birthday) > @todayMonth AND DateTimePart('mm', c.birthday) < @next30DaysMonth) " +
"OR (@todayMonth > @next30DaysMonth AND " +
"((DateTimePart('mm', c.birthday) > @todayMonth OR (DateTimePart('mm', c.birthday) = @todayMonth AND DateTimePart('dd', c.birthday) >= @todayDay)) " +
"OR (DateTimePart('mm', c.birthday) < @next30DaysMonth OR (DateTimePart('mm', c.birthday) = @next30DaysMonth AND DateTimePart('dd', c.birthday) <= @next30DaysDay))))")
.WithParameter("@todayMonth", today.Month)
.WithParameter("@todayDay", today.Day)
.WithParameter("@next30DaysMonth", next30Days.Month)
.WithParameter("@next30DaysDay", next30Days.Day);