DBCC FREEPROCCACHE clears execution plans from cache, not data. You might have the first run doing lots of physical I/O, and the second one (sp or not) getting most data from cache. To have both runs run in similar environments either both should run against clear cache (both execution plans and data), or both against warm cache depending on what you want to test.
To clear the data from cache use DBCC DROPCLEANBUFFERS (don't use in production).
Getting that out of the way, there are many things that could cause such problems. Here's a KB article you can start with:
BG, SQL Server MVP
Solid Quality Learning
"Falik Sher" <com> wrote in message news:phx.gbl...