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