tl;dr: looking at satellites between 300 and 1000 km altitude that happen to pass overhead, they definitely move the fastest when overead and slow way down. At the zenith they move 1.4 and 0.4 degrees per second respectively, and drop a factor of 10 in rate or more as they approach the horizon.
The interesting thing is that the fastest moving thing slows down the quickest, but that's just because it approaches the horizon the quickest.
OK I can't resist leaving a "me too" answer.
The only equation I know is the vis-viva
$$v^2(r) = GM_E\left(\frac{2}{r}-\frac{1}{a}\right)$$
where the Standard Gravitational Parameter $GM_E$ or $\mu$ for Earth is about 3.986E+14 m^3/s^2 (one of the few numbers I know) and $a$ is the semi-major axis.
For a circular orbit $r=a$ and it becomes just:
$$v^2 = GM_E\ / a,$$
and the velocity is just the circumference divided by the period $T$:
$$v = 2 \pi a / T.$$
Square it and set it equal to the previous, and you get:
$$T = 2 \pi \sqrt{a^3 / GM_E},$$
and if you define the rotation angular rate as $\omega = 2 \pi / T$, that becomes
$$ \omega = \sqrt{GM_E/a^3}$$
If I sit on the Earth at $\mathbf{r_{me}} = R \mathbf{\hat{x}}$ and watch a satellite at an altitude $h$ such that it's orbital radius is $R+h$, it's position will be
$$\mathbf{r_{sat}} = (R+h) \left( \mathbf{\hat{x}} \cos(\omega t) + \mathbf{\hat{y}} \sin(\omega t) \right)$$
and the angle between the satellite and the zenith assuming it passes through the zenith will just be
$$\theta = \arctan\left( \frac{y_{me}-y_{sat}}{x_{me}-x_{sat}} \right).$$
I'll switch to Python, most if it is just making the plots:
import numpy as np
import matplotlib.pyplot as plt
halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)]
degs, rads = 180/pi, pi/180
GMe = 3.986E+14 # m^3/s^2
R = 6378. * 1000. # approx radius of Earth in meters
altitudes = 1000. * np.arange(300, 1001, 100) # meters
t = np.arange(600.) # 0 to 10 minutes, in seconds
thetas = []
for h in altitudes:
a = R + h
omega = np.sqrt(GMe/a**3)
r_sat = (R + h) * np.array([np.cos(omega*t), np.sin(omega*t)])
r_me = R * np.array([1, 0])[:, None] * np.ones_like(t)
theta = np.arctan2(r_sat[1]-r_me[1], r_sat[0]-r_me[0])
theta[theta > halfpi] = np.nan
thetas.append(theta)
if True:
fs = 16
plt.figure()
plt.subplot(3, 1, 1)
for theta in thetas:
plt.plot(t/60., degs*theta)
plt.xlabel('minutes', fontsize=fs)
plt.ylabel('degs from zenith', fontsize=fs)
plt.text(0.3, 70, '300km')
plt.text(5.2, 70, '1000km')
plt.subplot(3, 1, 2)
for theta in thetas:
plt.plot(t[1:]/60., degs*(theta[1:] - theta[:-1]))
plt.xlabel('minutes', fontsize=fs)
plt.ylabel('degs/sec', fontsize=fs)
plt.text(0.3, 1.3, '300km')
plt.text(0.3, 0.2, '1000km')
plt.subplot(3, 1, 3)
for theta in thetas:
plt.plot(degs*theta[1:], degs*(theta[1:] - theta[:-1]))
plt.xlabel('degs from zenith', fontsize=fs)
plt.ylabel('degs/sec', fontsize=fs)
plt.text(30, 1.3, '300km')
plt.text(20, 0.16, '1000km')
plt.show()