The answer from @creidhne using `IndexPosition` and `GeoDistanceList` is elegant and works for a vast majority of cases.  However, in instances where the spacing between route points is significant (up to half a mile in real world worst case scenarios), and the nearest route point is further up the trail, the reported distance will be over by twice the distance from the waypoint to the route point since you are essentially calculating the distance to double back.

Using the code from @creidhne as a base, I was able to modify it so that it finds the nearest route point prior to the waypoint and then adds the remaining distance.  This should give the right answer 100% of the time since it removes any chance of reporting distance from doubling back from a far off route point up the trail.

Here is the complete code:

***Bring in the data:***

    ClearAll[data];
    ToExpression@Import["https://pastebin.com/raw/8KDcvMex", "String"];
    trail = GeoPosition /@ data[[All, 1]];
    waypoint = GeoPosition[{34.56544401, -77.90251801}];

***Calculate the Distance***

    priorpoint = 
    Min[PositionIndex[trail] /@ GeoNearest[trail, waypoint, 2]];
    Total@GeoDistanceList[trail[[1 ;; priorpoint]]] + 
     UnitConvert[GeoDistance[waypoint, trail[[priorpoint]]], "Miles"]

Note: I had to include `UnitConvert` since my answer was coming out in feet instead of miles.