Creating an enumerable by calling a function returning enumerables
There is no need to create lists and add items to the lists when working with enumerables; yield is your new best friend.

As written, GetScheduleList() is messy to unit test so we can push the condition up a level and then use yield

private static IEnumerable&lt;KpiSchedule&gt; GetScheduleList(PlantConfiguration plant, bool includeDaily)
{
    yield return plant.HourlySchedule;
    if (includeDaily)
    {
        yield return plant.DailySchedule;
    }
}


To aggregrate the schedules for each plant we can use SelectMany().

private static IEnumerable&lt;KpiSchedule&gt; GetAllSchedules(IEnumerable&lt;PlantConfiguration&gt; allPlants, bool includeDaily)
{
    return allPlants.SelectMany(p =&gt; GetScheduleList(p, includeDaily));
}


We can now revise UpdateValues() to something like

private static void UpdateValues(PlantList plantList)
{
    DateTime utcTopHourDate = GetUtcTopHourDate();
    var includeDaily = CheckIncludeDaily(utcTopHourDate);

    var schedulesToUpdate = GetAllSchedules(plantList.Plants, includeDaily);
    //... Do stuff with the schedule list

}


or even

private static void UpdateValues(PlantList plantList)
{
    DateTime utcTopHourDate = GetUtcTopHourDate();
    var includeDaily = CheckIncludeDaily(utcTopHourDate);

    var schedulesToUpdate = plantList.Plants.SelectMany(p =&gt; GetScheduleList(p, includeDaily));
    //... Do stuff with the schedule list
}