UPDATE
После некоторых серьезных боевых действий с этой проблемой и помощи со стороны пользователей SO мне удалось ее решить.
Вот как выглядит мой clearProgressUpTo.
    public void clearProgressUpTo(int progress) {
    boolean deleted = false;
    for (int i = fragments.size() - 1; i > 0; i--) {
        int key = fragments.keyAt(i);
        if (key != progress) {
            fragments.delete(key);
            deleted = true;
        } else {
            break;
        }
    }
    if (deleted)
        notifyDataSetChanged(); //prevents recursive call (and IllegalStateException: Recursive entry to executePendingTransactions)
    while (mSavedState.size() > progress) {
        mSavedState.remove(mSavedState.size()-1);
    }
}
Причина, по которой я делаю это после notifyDataSetChanged, состоит в том, что initiateItem снова заполняет мой mSavedState. И я уверен, что после уведомления моего adapter не выполняется ни одно из этих Fragments.
Также, если вы хотите сделать это так, измените ваш mSaveState на protected, чтобы вы могли получить его из расширяющегося класса (в моем случае VerticalAdapter).
Я забыл упомянуть, что я использую FragmentStatePagerAdapter fix от Adam Speakman, чтобы решить мою проблему.
///////////////////////////////////////////////////// ЧАСТЬ ВОПРОСА//////////////////////////////////////////////////////
проблема, с которой я столкнулась, заключается в том, что мне нужно полностью удалить часть Fragments, содержащуюся в FragmentStatePagerAdapter.
Я уже сделал исправление POSITION_NONE, но старые фрагменты по-прежнему остаются неповрежденными.
КОНСТРУКЦИЯ
Поскольку конструкция моего ViewPager необычна, мне пришлось помещать внутри моего VerticalAdater расширение FragmentStatePagerAdapter a SparseArray, которое содержит все мои фрагменты.
public class VerticalAdapter extends FragmentStatePagerAdapter {
private SparseArray<Fragment> fragments = new SparseArray<Fragment>(); 
...
@Override
public Fragment getItem(int position) {
    return getFragmentForPosition(position);
}
@Override
public int getCount() {
    return fragments.size();
}
ПРОБЛЕМА
Я сделал специальный метод, отвечающий за очистку всего Fragments до некоторой точки в моем FragmentStatePagerAdapter. Его работа хорошо, но проблема, с которой я не могу избавиться, очищает ArrayList внутри FragmentStatePagerAdapter. Даже если я очистил SparseArray, ArrayList от FragmentStatePagerAdapter, что my VerticalAdapter extends все еще держит Fragments, который я не хочу иметь там. Из-за этого, когда я создаю новый Fragments, у них есть состояние старых.
public void clearProgressUpTo(int progress) {
    boolean deleted = false;
    for (int i = fragments.size() - 1; i > 0; i--) {
        int key = fragments.keyAt(i);
        if (key != progress) {
            fragments.delete(key);
            deleted = true;
        } else {
            break;
        }
    }
    if (deleted)
        notifyDataSetChanged(); //prevents recursive call (and IllegalStateException: Recursive entry to executePendingTransactions)
}
Если вам нужна дополнительная информация/код, пожалуйста, скажите мне в комментариях, я постараюсь предоставить как можно больше информации.
Я понятия не имею, как исправить эту проблему, поэтому любой ввод будет оценен.
ИЗМЕНИТЬ
Добавление запрошенного кода.
private Fragment getFragmentForPosition(int position) {
    return fragments.get(getKeyForPosition(position));
}
public int getKeyForPosition(int position) {
    int key = 0;
    for (int i = 0; i < fragments.size(); i++) {
        key = fragments.keyAt(i);
        if (i == position) {
            return key;
        }
    }
    return key;
}