This is not an answer, but also too many words for a comment and I didn't want to post a handful of comments.
I am not sure if this is NP-hard or not, but I have some ideas for a proof.
Proving NP-hard
I would take an approach similar to the NP-hardness proof for Super Mario Bros. Please watch this lecture: https://youtu.be/7d73E1DiH0w?t=2851
First you would need to change your question to "Has Path" rather than "Shortest Path". That is, does there exist a path from start to finish at all? For example, the answer is clearly no for the following (where green is start and red is finish):

We can then try to reduce a given 3SAT instance to this problem. My idea is not complete, but the idea is to use turnstiles as boolean "switches" which will determine a literal true or false.
For example, let's say (A) means a literal is false and (B) means a literal is true:

We can construct variables in such a way that the given path from source to end only allows one of the literals to be true. For example, the following would be such a variable:

If the top path is taken then $x$ is true, if the bottom is taken then the $x$ is false. Notice that if the path were attempted $A \rightarrow \neg X \rightarrow X$ that $X$ would be blocked and could not be flipped unless we go back through $\neg X$ which would flip $\neg X$ back to false. So this is a valid gadget that says "$X$ can only be true or false and the path from $A$ to $B$ will determine that value."
Next we need to construct a clause gadget. My idea for this would be to essentially have a similar setup to the example above where every instance of $X$ can be "set" to true at the same time by flipping its turnstile OR every instance of $\neg X$ can be "set" to true at the same time by flipping its turnstile but NOT both.
We need to construct this clause gadget in such a way that the literal and its negation cannot be both true at the same time. My idea was the following.
Let's say we have a SAT formula: $(x \lor \ldots) \land (\neg x \lor \ldots)$. We could construct a clause like:

If we had $x$ in multiple clauses like: $(x \lor \ldots) \land (\neg x \lor \ldots) \land (x \lor \ldots)$. We could have the following:

The important thing to note here is that you can't flip the $x$ turnstiles while also flipping the $\neg x$ turnstiles.
Then if we have multiple variables like: $(x \lor y \ldots) \land (\neg x \lor y \ldots) \land (x \lor \neg y \ldots)$. We would first route the path through $x$ then through $y$:

Again note that if we tried to choose $x$, the $x$ and $\neg x$ paths reconnect when routing to $y$. However, going "back" one path you would still not be able to "set" the other turnstiles because they are blocking a backward entrance due to their positioning, so the only route forward after $x$ is determine is to continue on to $y$ if you want to make it from start to finish.
For example, a valid solution to our 3SAT formula would be $x$ is true and $y$ is true. This would correspond to the following path from start ($x$) to finish (red). The path is shown in green:

The last thing we would need to do is verify that all clauses have at least one turnstile "switched" on. You can see in my example we could also get a path from start to finish with $x$ is false and $y$ is false even though this does not satisfy the 3SAT formula.
In the Super Mario example, the clauses are verified by "unlocking" a super star which allows Mario to survive a flame walk to the end. We don't exactly have this luxury in our game. By flipping our turnstiles we can't "unlock" anything special, like a path to the end. You could attempt to accomplish this with waypoints, but the waypoints don't actually add much because a path could go to the waypoint, then go exactly back to start and continue on as normal and it has effectively "visited" the waypoint without having to change its solve path.
One idea I had for "unlocking" something by completing a clause was the following:

If $x$, $y$ or $z$ are "set" then they can (exactly one at a time) go into the bottom chamber and flip the turnstile blocking upward entry from A
. The idea would be that if you put a waypoint below A
for each clause and you hook up the end of the variable chain to the right most A
then you hook up B
to the A
of the clause to the left and chain them together like that. Then the B
of the leftmost clause would be the end. The issue is what I just mentioned, we could just go to the way points then go all the way back to the start, then just set a literal in the first clause an exit.
So these would be my main ideas for constructing a reduction, however its clearly incomplete. If we added in "one-way" blocks or waypoints that only allowed the path to go in one direction but not back then I think this may work because you could trap a regular waypoint behind a one-way block.
The other big issue I did not mention but you would realize if you watched the Super Mario reduction is that the graph I have been showing is non-planar whereas the game is played on a planar graph. We would also need someway to establish crossovers which I think is nontrivial. One idea would be to do something like this:

This is clearly an issue however because if the green path was the "exit" of setting $x$ and the red path was the "entry" of setting $\neg x$ in a clause then you could exit setting $x$ and turn right to effectively also set $\neg x$. This is not allowed.
So you would need to resolve these crossovers as well.
Hopefully someone can take some of these ideas and run with them. It has the vibes of an NP-hard problem since you can essentially encode the turnstiles as bits and almost encode a 3SAT equation into them, but I'm not convinced yet.