You need to apply color on average five times (so four or five rotations depending on how you count).
Since we randomly rotate every time WLOG we can assume we always color the right half. I also assume we will always rotate before coloring.
We can represent the uncolored slice simply by a proportion $\alpha$ of the full circle. Let $f(\alpha)$ be the expected number of rotations needed for remaining slice $0 < \alpha \leq \frac{1}{2}$ (the first time around we always color exactly half).
We find that the chance this slice is completely on the right half is $\frac{1}{2} - \alpha$ (consider how much we can rotate $\alpha$ starting from being aligned vertically on one edge to being aligned vertically again on the other edge). In that case we are done.
We get a similar chance for 'completely on the left half', in which case we made no progress.
In the remaining case we get a partial hit (which has chance $1 - 2\cdot(\frac{1}{2} - \alpha) = 2\alpha$), we can take the mean over all possible proportions that are left (which have uniform equal chance of appearing by rotational symmetry):
\begin{align}
f(\alpha) &= 1 +\left(\frac{1}{2} - \alpha\right) \cdot f(\alpha) + 2\alpha\cdot\lim_{\epsilon \to 0} \frac{1}{\alpha - \epsilon}\left[\int_\epsilon^\alpha f(p)\mathrm{d}p\right]
\end{align}
$$\left(1 + 2\alpha\right)f(\alpha) - 2 = 4\alpha\cdot\lim_{\epsilon \to 0}\frac{1}{\alpha - \epsilon} \left[\int_\epsilon^\alpha f(p)\mathrm{d}p\right]$$
Now as an ansatz*, let $f(\alpha) = 2 + 4\alpha$. Then:
\begin{align}
\left(1 + 2\alpha\right)(2 + 4\alpha) - 2 &= 4\alpha\cdot \lim_{\epsilon \to 0}\frac{1}{\alpha - \epsilon} \left[\int_\epsilon^\alpha (2 + 4p)\mathrm{d}p\right]\\
8\alpha +8\alpha^2 &= 4\alpha\cdot \lim_{\epsilon \to 0}\frac{2\alpha + 2\alpha^2 - 2\epsilon - 2\epsilon^2}{\alpha - \epsilon}\\
8\alpha +8\alpha^2 &= 4\alpha \cdot (2 + 2 \alpha)\quad \checkmark
\end{align}
Thus our final answer is $1 + f\left(\frac{1}{2}\right) = 5$.
My ansatz was generated programmatically:
import numpy as np
import matplotlib.pyplot as plt
def f(a):
r = np.random.rand()
if r < 2a:
# Partial hit.
return 1 + f(np.random.rand() a)
if r - 2*a < 0.5 - a:
# Complete miss.
return 1 + f(a)
# Complete hit.
return 1
def favg(a, it=10000):
return sum(f(a) for _ in range(it))/it
A = np.linspace(0.0001, 0.5, 100)
fa = np.array([favg(a) for a in A])
plt.plot(A, fa, label="f(a)")
plt.plot(A, 2+4*A, label="2+4a")
plt.legend()
plt.tight_layout()
plt.show()
