A while back a post by Jon Skeet planted the idea in my head of building a CompiledFormatter class, for using in a loop instead of String.Format().
CompiledFormatter
String.Format()
Have you accounted for the time to do the JIT compile as well? After all, the framework will be ngen'd which could account for the differences?