It's almost certainly a matter of the data for the first run are not in the cache and have to be read from disk. After that first run then the data is in cache and the query can run much more quickly. After several minutes other data needs to be in the cache and so the data for this query get's pushed out.
There is a simple way to test this. Run the following
SET STATISTICS IO ON
GO
EXEC stored_procedure
Then check the output. It will look something like this:
Table 'syspalvalues'. Scan count 0, logical reads 0, physical reads 240, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syssingleobjrefs'. Scan count 0, logical reads 0, physical reads 40, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysdbreg'. Scan count 1, logical reads 0, physical reads 2, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Note that all of the reads are physical reads
Table 'syspalvalues'. Scan count 0, logical reads 240, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'syssingleobjrefs'. Scan count 0, logical reads 40, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysdbreg'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Note that the reads are now logical reads.
So having resolved why the query is slowing down you will want to fix it. There may be other ways but adding memory to the server is probably the simplest. If there is more memory then the cache will be bigger and more data can stay in it longer.
There is probably a way to force the data to stay in cache but I don't know it off the top of my head. I'll do some looking around though.
EDIT: You might also consider looking at page life expectancy for the server. My guess is that it will be fairly low meaning that the pages of data are not being held very long in memory.