This can be calculated precisely using the theorem of total probability. There are 8 mutually exclusive conditioning cases: 8 spaces next to 4 kings (the kings sufficiently well spread out in the pack), down to only 1 space next to 4 kings (all 4 kings at one side or the other). Clearly the more spaces you have, the more chance there is of one of the spaces being occupied by a 7. So an upper bound on the probability is given by the probability of getting at least one 7 in one of the 8 spaces, which is $1 -$ the probability of getting no 7s in any one of the 8 spaces.
$$\begin{eqnarray*}
1 - \rm{Pr}(\mbox{no 7s in 8 spaces}) &=& 1 - \frac{44}{48}\frac{43}{47}\frac{42}{46}\frac{41}{45}\frac{40}{44}\frac{39}{43}\frac{38}{42}\frac{37}{41} \\
&=& 1 - \frac{40 \times 39 \times 38 \times 37}{48 \times 47\times 46\times 45} \\
&=& 0.53
\end{eqnarray*}$$
which isn't as high as the question suggests.
Edit: It's possible to calculate the probability programmatically, by running through all the $\frac{52!}{4!4!44!}$ = 52677670500 possible permutations. Using the following C++ program, which took an hour or two to run, the probability comes to 0.486279. I would prefer it if there were a more elegant way of computing the probability however!
#include <stdio.h>
#include <algorithm>
#include <math.h>
int main(int argc, char* argv[])
{
const int n = 52;
int x[52] = {
0,0,0,0,
1,1,1,1,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3};
double count = 0;
double total = 0;
double lastFreqPrinted = 0;
do {
total++;
for(int i=1; i<n; ++i) {
if ((x[i-1] + x[i]) == 1) {
count++;
double freq = count/total;
if (fabs(lastFreqPrinted - freq) > 0.0001) {
printf("%.4f out of %.0f\n", freq, total);
lastFreqPrinted = freq;
}
break;
}
}
} while (std::next_permutation(x,x+n));
printf("%f out of %.0f\n", count/total, total);
return 0;
}