software serial .available() gives inconsistent behavior

Hooray! It works perfectly now. Thanks PaulS for the hint. I made the following changes:

boolean stateChanged = debouncer.update();
buttonValue = debouncer.read();

if (stateChanged && buttonValue == LOW)
{
digitalWrite(ledPin, HIGH);

Now it only registers a button press once per press and any presses occurring while the code is still in progress executing are ignored. Exactly what I needed.