You're passing in (what looks like) a date/time. Query caching is based on the arguments to the query (or more specifically, the SQL that would be used). I'm assuming you're passing in different date/time valus each time. Each different date/time value would have its own cached result, unless you're just passing in the same date value each time?
e.g. these would be treated as two different objects for caching:
<cfstoredproc datasource="#XXX#" procedure="XXX" cachedWithin="#CreateTimeSpan(0,3,0,0)#">
<cfprocparam type="In" value="2013-06-13 09:00:00" cfsqltype="CF_SQL_TIMESTAMP">
</cfstoredproc>
<cfstoredproc datasource="#XXX#" procedure="XXX" cachedWithin="#CreateTimeSpan(0,3,0,0)#">
<cfprocparam type="In" value="2013-06-13 10:00:00" cfsqltype="CF_SQL_TIMESTAMP">
</cfstoredproc>
From the documentation:
To use cached data, the current query must use same SQL statement, data source, query name, user name, and password.