I don't really see how using a Timer for this makes sense. Surely the user would want the system shut down WHEN the download finished, not some arbitrary amount of time afterwards or perhaps even beforehand. You should not use a Timer at all and simply invoke the shutdown code WHEN the download completes.

It doesn't matter how you're performing the download; there will be a simple way to know when it's done. If you're calling a synchronous method then you know it's done when the method returns. If you're using an asynchronous method then there will be a callback or event to tell you.