At first, I was worried that changing the orientation of a face would affect the correctness of this algorithm. My thinking was, if the orientation is changed, then the next of the twin of that first half-edge would be the top right edge of the polygon in the example, and so we would not traverse around the central vertex. However, I see now that if the orientation flipped, then the half-edge of the central vertex would not be the edge directly above it, but the edge directly below it. Working it out from that point with the new orientation, it seems that the algorithm works as expected, it just traverses the edges in a different order.
Alternatively, the half-edge in the flipped orientation could be the twin of the top half-edge. Things still work out in this case as well, and this is probably the more natural way to think about it: flipping the orientation changes the half-edge of a given vertex to be its twin.
Although this kind of structure makes it easier for us to loop through everything in the mesh, I feel like it would be difficult for us to pinpoint to the mesh to return the right struct.