Hopper Timer only exchanges one item?

This is the intended way of operation. As both hoppers try to push their first item each way, only one ends up moving.

To make hoppers pass the whole load before starting to pass it back, you need to block the next (opposing) hopper until your current one is empty. The standard way (that you mention yourself) is measuring the contents of the current hopper with a comparator, and feeding this signal into the next hopper.

Here's SethBling's hopper clock from Minecraftwiki:

Hopper clock

Hoppers are directed clockwise, right now the items are moving from top left hopper to top right one, which is still locked by a signal from top comparator, and is already sending a lock signal to bottom right hopper.

For more designs, see this section on the wiki.