tl;dr Try using Reduce.
Consider the equation:
3(x-1)/(x-1)
Is this equal to 3? We'd normally say so, but there is a difference between the two. They don't agree at a certain point (x->1). So we say that they are "generically equal". This means you can expect them to agree except at specific points. Normally, humans don't worry about the difference when we're doing math on a chalkboard because we're very co-operative and anticipate what is needed. But algorithms can't do this. They obey very strict rules instead of being co-operative while doing algebra.
Generic equality produces all sorts of confusion. It's not a topic taught in Math classes. There's a short tutorial on it: https://reference.wolfram.com/language/tutorial/GenericAndNonGenericSolutions.html
But the moral of the story is that you shouldn't be too surprised when there are specific points at which two "equal" equations don't agree.
Now to look at your specific example, let's first create a simplified version of your problem:
Solve[F Sin[theta] == Piecewise[{{1, F*Cos[theta] >= -1}}, 0], F, Reals]
ConditionalExpression[
Csc[theta],
(Cos[theta] > 0 && Sin[theta] > 0) || (Cos[theta] > 0 &&
Cos[theta] + Sin[theta] < 0) || (Cos[theta] < 0 &&
Sin[theta] < 0) || (Cos[theta] < 0 &&
Cos[theta] + Sin[theta] > 0)]
Anytime you see a problem like this, please try to create a simpler version of the problem like the one above. It's often very instructive.
If we check this ConditionalExpression for when theta is equal to Pi/2, we'll see it's not defined. Just like in your example.
We can plot the values of theta when this has a solution using NumberLinePlot. It is clear then that this doesn't give a solution for plus or minus Pi/2 or 90 degrees. Some algebra happened where this part of the solution was ignored. That happens with Solve.
But according to the documentation we can use Reduce instead of Solve. Reduce doesn't use generic equality.
mySolution =
Reduce[F Sin[theta] == Piecewise[{{1, F*Cos[theta] >= -1}}, 0], F, Reals]
(Cos[theta] <
0 && ((Sin[theta] < 0 && F == Csc[theta]) || (Sin[theta] == 0 &&
F > -Sec[theta]) || (Sin[theta] == -Cos[theta] &&
F == -Sec[theta]) || (Sin[theta] > -Cos[theta] &&
F == Csc[theta]))) || (Cos[theta] ==
0 && ((Sin[theta] < 0 && F == Csc[theta]) || (Sin[theta] > 0 &&
F == Csc[theta]))) || (Cos[theta] >
0 && ((Sin[theta] < -Cos[theta] &&
F == Csc[theta]) || (Sin[theta] == -Cos[theta] &&
F == -Sec[theta]) || (Sin[theta] == 0 &&
F < -Sec[theta]) || (Sin[theta] > 0 && F == Csc[theta])))
That's some very complicated output, but let's see what happens when we set theta to Pi/2
mySolution /. theta -> Pi/2
F == 1
Which is what we were looking for.