Две вещи.
Во-первых, согласно вашему коду, в методе moviePlayBackDidFinish вы должны сначала освободить moviePlayer, а затем снова создать его экземпляр с помощью alloc. Вы должны делать это каждый раз, когда хотите воспроизвести видео.
MPMoviePlayerController *moviePlayer = [notification object];
[moviePlayer release]
...
MPMoviePlayerController *newMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: anURL];
Структура вашего кода работает, но я думаю, вам лучше взглянуть на пример, предоставленный Apple:
http://developer.apple.com/iphone/library/samplecode/MoviePlayer_iPhone/index.html
Во-вторых, по поводу наложения, вы правы, наложение получает события, но вы не можете поместить его под элементы управления проигрывателя фильма. То, что вам нужно сделать, это использовать события, которые вы получаете в оверлее, чтобы управлять игроком. Вы можете использовать событие touchesBegan, чтобы передать начальное событие касания и использовать его с проигрывателем (воспроизведение, пауза, остановка).