Почему метод элемента MediaElement «Play()» работает только по нажатию кнопки?
В таких случая стоит читать MSDN :)Any calls to Play, Pause, and Stop methods that occur before the MediaOpened event is raised are ignored.
Т.е. после установки Source, подписывайтесь на MediaOpened и в обработчике уже вызывайте Play().
А с кнопки работало, потому что, пока вы нажимали на кнопку, файл успевал уже открыться.
Посмотрите в каких потоках вызываете метод play. Попробуйте вызвать его в UI-потоке