MultiSelectListPreference perde seleções quando dispositivo é rotacionado

Estou com uma dúvida sobre como resolver um questão do Preference Framework do android. Tenho uma activity e nela atachada um PreferenceFragment com uma MultiSelectListPreference em sua view. Quando o usuário aperta no label do Preference Fragment uma DialogFragment com uma lista de check boxes surge na tela. quando eu seleciono alguns itens desta lista e aperto o botão salvar os itens selecionados são salvos nas preferencias do app normalmente.Quando eu abro a FragmentDialog e seleciono vários itens desta lista e rotaciono o celular, a nova tela é recriada, a Dialog reaparece e as seleções feitas se perdem, o que aparece selecionado são o itens que já estavam salvos nas preferencias do app. Como devo proceder para restaurar as seleções feitas nessa lista da dialog quando rotaciono o celular?

Quando você rotaciona um fragment (no caso o PreferenceFragment), ele é destruído para ser recriado. Logo antes do onDestroy, o Android chama um método onSaveInstanceState onde podemos salvar informações para serem recuperadas pela próxima instância desse fragment logo após o fragment ser recriado. Para recuperar a informação, basta usar o bundle que você recebe no onCreateView.

public class MeuFragment extends PreferenceFragment {

    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle bundle) {
        if(bundle != null) {
            MinhaInfo info = (MinhaInfo) bundle.getSerializable("info");
        }
        //...
    }

    public void onSaveInstanceState(Bundle bundle) {
        super.onSaveInstanceState(bundle);
        bundle.putSerializable("info", minhaInfoQueQueroSalvar);
    }
}

Eu já havia pensado nesta possibilidade e tentei resolver a questão com o código abaixo porém não obtive resultado positivo. O MultiSelectListPreference não grava as seleções feitas na lista da dialog quando quando eu giro o celular.

public class PreferenciasFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private MultiSelectListPreference listaDePreferencias;
private AvisoDeAlteracaoDePreferencias listener;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Resources res = getActivity().getResources();
    addPreferencesFromResource(R.xml.preferencias);
    listaDePreferencias = (MultiSelectListPreference) findPreference(res.getString(R.string.municipios_preferidos_key));
    SharedPreferences preferencias = PreferenceManager.getDefaultSharedPreferences(getActivity());
    preferencias.registerOnSharedPreferenceChangeListener(this);
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Log.i("valores selecionados", listaDePreferencias.getValues().toString());
}

public interface AvisoDeAlteracaoDePreferencias {
    public void avisarAlteracaoDePreferencias(ArrayList<String> alteraces);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Set<String> s = new HashSet<String>();
    s = listaDePreferencias.getValues();
    ArrayList<String> s2 = new ArrayList<String>(s);
    outState.putStringArrayList("selecoes", s2);
    Log.i("SaveInstanceState", String.valueOf(s2.size()));
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        ArrayList<String> s = new ArrayList<String>();
        s = savedInstanceState.getStringArrayList("selecoes");
        Set<String> set = new HashSet<String>(s);
        listaDePreferencias.setValues(set);
    }
    return super.onCreateView(inflater, container, savedInstanceState);
    }    
}