Note that the problem here is not why the node was marked as failed but why it is not marked as alive several minutes after it is reachable and able to serve client traffic. Disabling and re enabling nodes or restarting traffic manager software are reactive workarounds and will not be feasible in most situations.
One possible cause of this behavior could be a Traffic Script Request rule that prevents 'real' traffic reaching the backend node(s). In this situation, Passive Monitoring does not mark the node(s) back alive. For instance, a request rule that unconditionally implements http.sendResponse() API could prevent the client request from ever reaching the backend node.
Depending on the traffic script logic, the problem might only appear if all nodes in a pool are marked as failed (and subsequently never marked back alive)