Наверное глупое сейчас напишу.
В if some_obj: вызывается __bool__(). Если его нету, вызывается __len__().
А в случае mongoengine.BaseDocument (я только по коду смотрел) __len__() возвращает len(self._data). А вот эта _data вполне может быть пустой, как я понимаю, в существующем объекте.
Мне кажется, какая-то нехорошая неоднозначность получается?