Oh, what a tangled web we weave!
I think the dynamic waypoints I've done are about as good as can be expected. Looking at the results, I can't help but think, "if this were a navmesh, it could guarantee 100% coverage and not have to have nodes everywhere with the potential of missed paths."
The disadvantage to nodes, is you never really know when you have enough. With a navmesh, you can say, "I'm on the navmesh" and be done with it, or "I'm not on the navmesh -- need to generate another poly."
I think I'm going to continue with waypoints for now since I've gone this far. Ultimately, the bots will hopefully be following the other path system I'm working on to allow strafe jumping, and this will just be there as backup/beginner level bots.
I have A* pathfinding implemented. Now I just need to make the bots follow some paths and give them some goals.