I don't see what's so terribly wrong by making the hostage follow waypoints ? ???
Else you can do something more realistic, make your hostage fire a TraceHull (human_hull) towards your player and always head up towards the last hit point which reached the player (i.e, the vector location where your player was last visible for the hostage...)
I don't see the place where you put your hostage in movement ?
Setting the angles may not necessarily be enough. IMO a pfnWalkMove() call should be needed (it's the RunPlayerMove() for monsters...)