Как правило, я бы всегда рекомендовал явно вызывать метод Dispose для любого класса, который его предлагает, либо вызывая метод напрямую, либо заключая в блок "using".
Чаще всего классы, реализующие IDisposible, делают это, потому что они обертывают некоторый неуправляемый ресурс, который необходимо освободить. В то время как эти классы должны иметь финализаторы, которые действуют как гарантия, вызов Dispose поможет освободить эту память раньше и с меньшими накладными расходами.
В случае объекта Form, как отмечено в ссылке на Kyra, задокументирован метод Close для вызова Dispose от вашего имени, поэтому вам не нужно делать это явно. Однако, мне всегда казалось, что нужно полагаться на детали реализации. Я предпочитаю всегда вызывать как Close, так и Dispose для классов, которые их реализуют, для защиты от изменений / ошибок реализации и ради ясности. Правильно реализованный метод Dispose должен безопасно вызываться несколько раз.