Inside doAccepted, this code looks like it has a typo, using "_state" instead of "state" the passed in parameter. I highlighted it in red. My thinking is we want the members the leader sent (the param), not the local _state buffer, for members:
If it's wrong, can undo tomorrow. Testing on single and two machine setups at home is as good as things were yestereday.

    HashSet<H2ONode> members = new HashSet(Arrays.asList(_state._members)); <---going to change to "state._members"