Можно ли назначать обработчик события внутри другого обработчика?
Можно, но на hide надо этот обработчик удалять. иначе при каждом открытии у вас будет добавляться новый обработчик, и они все будут вызываться на закрытие. В вашем случае вы вряд ли увидите какие-то реальные проблемы, но это неправильно. поставьте рядом с removeClass  console.log и откройте-закройте несколько раз - увидите в чем проблема.  но насколько он верный? 
Зачем вы так делаете вообще? что мешает навешать сразу два обработчика на открытие и закрытие и все?
Технически можно, но каждое открытие модалки будет навешивать ещё один обработчик события. В данном случае ничего не сломается, просто N раз будет происходить попытка удаления класса у кнопки, но вообще так делать не стоит. Однако, если вы поставите обработчик при помощи .one(), проблема исчезнет.