Наконец-то понял это сам.
Оказывается, проблема была в том, что в функции flags в случае недопустимых индексов мне не удалось вернуть флаг ItemIsDropEnabled. Недопустимый индекс - это сигнал для корневого узла, то есть области представления, где не было элементов, и поэтому пустое пространство не могло быть сброшено.
Это было трудно обнаружить, потому что я пытался использовать перетаскивание, чтобы добавить элементы в свое дерево, и поэтому не было ни одного без работающего перетаскивания, то есть все, что я видел, это круг с косой чертой.