Hey,
From as far as I remember,by design it was that when you call EndDownload method you should get an exception.
So ideally should work like that.
You BeginDownload
Then do something and when you get notified that it was finished, successfully or not, you call EndDownload and thats where you should get an exception.
You should always call End*** operation on any Begin**, this is what Microsoft recommends at least, so I was trying to follow there guidelines.
Hope it helps,
Thanks,
Oleg