That's along the lines of what I initially thought [being associated with playing video]. Thing is; the crash occurs in
object mediatransport = AddInHost.Current.MediaCenterEnvironment.MediaExperience.Transport;
(from memory; the MediaExperience is fine - all it's objects are throwing RemoteExceptions).
Now, this line of code is never executed by itself, it is always preceded by a MediaCenterEnvironment.PlayMedia() call which does indeed start a new video (and I thought, setup a brand spanking new MediaExperience).
I was leaning towards this being caused by the "old" mediatransport object being kept alive for 60 seconds after the current video finished playing (and indeed, if I start another video within these 60s everything is hunky dory) but I still figured that if the transport has been collected and cleaned up a new one would be created no problem as there is now a new file playing. What I can't really get my head around is the fact it works fine the first time the application is started - always, but press stop (or let the video complete), wait 1 minute and try another file, the file starts playing immediately followed by a crash.
---edit---
So, after more fiddling it turns out neither of "my" methods are responsible for this (at least it doesn't seem like they are). I've commented out the EventHandler and DeferredInvokeOnWorkerThread but it still throws a wobbly after leaving it alone for a minute plus before starting the next file. Removing the line setting up the object all is good again, but then I'm back to square one with no reliable way of catching when a file is stopped?