For each loop through DayOfWeek enum to start on Monday?

Use a for loop and the modulo (%) operator :

DayOfWeek day;
for( int i = 0 ; i < 7 ; i++ )
{
    day = (DayOfWeek) ((i + 1) % 7);
    // Add stuff to a list
}

If you want to use this loop to shift another enum, you can always replace the number 7 with a variable initialized like this :

int length = Enum.GetValues(typeof(DayOfWeek)).Length;

You could even write a method to shift any enum, assuming that this enum has all the values between 0, 1, ..., n :

static IEnumerable<TEnum> Shift<TEnum>(int offset) where TEnum : struct
{
    int length = Enum.GetValues(typeof(TEnum)).Length;
    for( int i = 0 ; i < length ; i++ )
    {
        yield return (TEnum) (object) ((i + offset) % length);
    }
}

That isn't possible, purely because setting the culture doesn't change the fact that the DayOfWeek enum is defined as such:

public enum DayOfWeek {
    Sunday = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
}

You can, however, skip the first entry and add it later.. perhaps like this:

foreach (DayOfWeek day in Enum.GetValues(typeof(DayOfWeek))
                              .OfType<DayOfWeek>()
                              .ToList()
                              .Skip(1)) {
    list.Add(day.ToString());
}
list.Add(DayOfWeek.Sunday.ToString());

A single call to OrderBy can order them as desired. It's not possible to change the order of the call to Enum.GetValues.

var daysOfWeek = Enum.GetValues(typeof(DayOfWeek))
    .OfType<DayOfWeek>()
    .OrderBy(day => day < DayOfWeek.Monday);