Loose tolerance, misplaced surface seam, very short edges, and tangent surfaces are the main causes of failing fillets.
You can see the loose tolerance when you zoom on the isocurve near the edge and you see that the end of the isocurve does not touch the edge. The most reliable way to find the loose tolerance is selecting the polysurface before running What command and checking edge tolerances. If the edge tolerances exceed 0.001, change tolerance in Options command (Document Properties, Units) to about 0.001. Explode the polysurface and fix the edges of the surfaces. Sometimes RebuildEdges command is the best way to fix the edges. If the RebuildEdges command makes a gap between the adjacent edges, untrim the edges (with Untrim command) and trim the edges again (with Trim command). Join the surfaces into the polysurface and make the fillets with the FilletEdge command.
A surface seam in the wrong place is another common cause of the failing fillets. If you have this problem, move the seam away from the failing fillet with the SrfSeam command and run the FilletEdge command again.
Sometimes the fillets are failing because the FilletEdge command cannot cope with very short edges or with tangent surfaces. These problems do not have simple solutions. My favorite solution is replacing the polysurface with a SubD object. If this solution is not practicable, you have to either make the fillets by hand, or use different CAD program (e.g. Solidworks). Making the fillets by hand means cutting away the edges with pipes and making the fillet-like surfaces with the Sweep2 command.
Advanced Fillets in Rhino: https://wiki.mcneel.com/rhino/6/advancedfilletsinrhino