Wow, it's finally working!  The last issue wasn't really with the algorithm itself, but with the testing: tests were finishing before members were done executing the algorithm, resulting in inconsistent leadership. It turns out that the election timeout is the largest timeout we have, but prior to this tests could finish while a member was still waiting on an election timeout to complete.  More specifically, a member could still be volunteering when the test finishes, so it looks like they just "dropped off" when in fact they are waiting too long. 

Although...it would be kind of interesting to understand why a member is stuck volunteering, as all other members should be responding very quickly.  Oh well, seeing more consistent results now. Will checkon why the long delay, even though all members voted.