I had a look at my code and think I see where the issue is.
It does indeed use the first face of the list as the fixed one if that face has only 1 neighbour. It’s just that if the mesh is not triangulated it triangulates the mesh first.
The triangulation is necessary because there is no guarantee when it is given a quad mesh that every face will be perfectly planar. However, using the default triangulator, there’s no guarantee that the first triangle of the first end face is actually the triangle on the end.
I think I can change this so that it picks that triangle.
In the meantime though, if you triangulate your mesh before feeding it to the unroller, the first face in the list should always be the one that is kept fixed, provided it actually is an end face.