This is the other side effect that people don't always pick up on. Once you have set an implicit wait, it lives for the life of the driver object. This means that when you create your explicit waits, they will use the driver object that already has an implicit wait set on it.
Let's have a look at a couple of scenarios to illustrate the problem.