1. Единственное отличие в том, что Subscriber определяет сразу несколько слушателей.
2. С помощью Subscriber'а удобно подписываться сразу на несколько событий одного класса. Например, Doctrine - можно сразу подписаться на postPersist и postUpdate и зарегистрировать один Subscriber. Если это же делать через Listener, то придется для каждого события создавать свой Listener и отдельно регистрировать его.
3. Если вы зарегистрировали Listener/Subscriber через Service Container, то вызывать EventDispatcher вам не нужно. Если же вы хотите подписываться на события в runtime, то тогда да, вам придется вызывать EventDispatcher.