For people who don't know Clojure, the reason this is a critical difference is because Clojure's map function is "lazy", in that it simply instantaneously returns an object which, if you attempt to iterate on it, only then attempts to execute the code involved.
To make this more concrete, if I take the former expression, and make it go to 1000, or 10000, or 10000000000000, it seriously takes the same amount of time on my system. By passing the result to doall you are forcing the entire seq to be iterated and executed.
Ah, I had a feeling I was missing something. I probably should have realised laziness had something to do with it. I'll have to keep that in mind in the future. Thanks for the information, its greatly appreciated.