My algorithm in Empire is a little different to yours and produces some excellent results.
1. Produce terrain height from 1-50 (1-25 = sea level).
2. Place an amount of water on the peaks. I use 100 water units.
3. I run a check through every tile on the map 50 times (to ensure water "flows" through the below process).
3a. If the tile contains water (in the first pass it's the peaks), I check all surrounding tiles for the lowest. If more than one I randomly pick two of them.
3b. I pour 100 units of water into each tile and mark them as river.
3c. If no lower tiles I convert the tile to "lake".
3d. If the originating tile is a lake I raise the height check by 1 to see where the water leaves the lake (basically too much water into the lake cause another river to leave it).
I find this algorithm produces rivers flowing out from the mountains, pooling in the flatlands and plateaus causing lakes of varied sizes, with a lot flowing further on till it reaches the sea. Interestingly, my model creates occaisional deltas, lake systems, long windy rivers and river systems where a number of rivers will converge to create one big flow (or a lake), just like in the real world.
I quite like my model.