Faster solution for data grouping to determine highest frequency than iteration with for loops
I have recast your loop, and the code is below.  I will discuss a couple of points.

pandas.Dataframe.groupby() allows working with specific groups at a time

Your current code is working with the entire dataframe for each region.  Pandas has the groupby to allow you to work with a specific regions data at one time.  I don't know if it is any faster, but to my eye is easier to read.

desired_cols = [region_col, main_dish_col, main_dish_prep_col]
for region, group in df[desired_cols].groupby('US Region'):
    ....


Using pandas.Series

A pandas.Series is a data structure that is basically two vectors.  One vector is the data, the other is the Index. In this code:

main_dish[is_in_region].value_counts().keys().tolist()[0]


.value_counts() returns a Series.  You then ask for the keys(), turn that into a list and the take the first element.  This is more naturally done by just taking the first elment of the index like:

.value_counts().index[0]


Main Loop Code:

df = pd.read_csv('thanksgiving-2015-poll-data.csv', encoding="Latin-1")
region_col = 'US Region'
main_dish_col = 'What is typically the main dish at your Thanksgiving dinner?'
main_dish_prep_col = 'How is the main dish typically cooked?'
desired_cols = [region_col, main_dish_col, main_dish_prep_col]

regional_entire_meal_data_rows = []
for region, group in df[desired_cols].groupby('US Region'):
    main_dish = group[main_dish_col]
    main_dish_prep = group[main_dish_prep_col]

    most_common_dish = main_dish.value_counts().index[0]
    prep_types = main_dish_prep[main_dish == most_common_dish]
    most_common_prep_type = prep_types.value_counts().index[0]
    regional_entire_meal_data_rows.append(
        (region, most_common_dish, most_common_prep_type))