1) Когда пользователь закрывает диалог, тапнув в любом месте, вызывается cancel(), а за ним dismiss(), hide() не вызывается.
2) Нет. Метод hide() только скрывает диалог, чтобы его можно было снова показать, он остаётся в памяти. Если диалог более не требуется, вызывайте dismiss(), чтобы корректно его уничтожить, или cancel(), если требуется предварительно вызвать обработчик повешенный на onCancel().
Коротко. Если сделать диалог hide(), то его можно show(); если сделать dismiss(), то show() вызовет ошибку.
Подразумевается, что диалог - одноразовая сущность, создаётся, показывается и уничтожается, после взаимодействия с пользователем. Основное кейс для hide() - отображение прогресса длительных процессов, когда нужно позволить пользователю скрыть диалог.