Prefiero WithEvents/Handles en situaciones en las que es aplicable, porque expresa mejor lo que se supone que debe hacer el código. Una advertencia con "WithEvents/Handles" es que cualquier objeto que reciba eventos de un objeto de mayor duración debe implementar IDisposable y debe establecer todas sus variables WithEvents en Nothing cuando se desecha, para garantizar que todos los eventos estén sin conexión. La separación de eventos cuando se usa AddHandler/RemoveHandler es igual de necesaria, pero quizás más obvia. Al usar WithEvents es algo más fácil de olvidar.
Por cierto, no conozco ninguna forma de configurar automáticamente todas las variables WithEvents en Nothing. Parecería un requisito bastante común, pero por alguna razón Microsoft no incluyó esa característica en VB.