The Timeout future is also polled twice - once right when it is created, and then again 1 second later when the timeout is reached. Timeout internally always polls the inner future before checking the timeout: tokio/timeout.rs at master · tokio-rs/tokio · GitHub.
Futures work by having a async runtime poll them as many times as it wants. It may even use busy waiting by polling it as many times as it wants. As optimization however a so called waker has been introduced. As soon as a future is ready it has to notify this waker, which tells the runtime to poll the future again. It may also notify the waker if it isn't ready yet, though this will waste resources. It is in the general case not possible to prevent spurious polls. An example where spurious polls are impossible to prevent is tokio::join!. This macro allows waiting on the completion of multiple futures. All futures share the same waker, so at every poll when any future is ready, all futures have to be polled to find out which one is ready. As for tokio::time::timeout specifically, it basically works by doing tokio::join! on the specified future and a timer (the actual implementation is slightly different, but this is the gist). The specified future comes first, so it gets polled every time the timeout gets polled, even if the timer has expired.