Looking over the Network.Fetch code, I think that it can fail in some specific scenarios:
If you load a Remote from a Repository, and it gets deleted by an external process in the time before being passed to Network.Fetch, Network.Fetch will try to reload it from the repository and fail.