В тот момент, когда в MaybeUninit лежит мусор, ты потому и не имеешь право делать read() или assume_init(), что ManuallyDrop никак не ослабляет требования валидности типа
я это прекрасно понимаю,
и ManuallyDrop используется с целью контроля высвобождения uniti, 1. сам ManuallyDrop заново создается и сетится с готовым значением, 2. чтение из ManuallyDrop происходит после сетинга ManuallyDrop + валидного значения.