Switches that need debounce before and after pull up

There are different flavors of debouncing depending on which end of the noisy transition you want to trigger on. Perry's code gives the result at BOUNCE_TIMEOUT past the end of the noise, which is the sort of debouncing you appear to want.

It differs from the leading edge detecting that some folks favor.

A collection and comparison of some of both methods are in this thread:

Your code looks derived closely from this:

... but extended to use an array of buttons.

As for the LOW vs HIGH, all the methods typically debounce both ends of a signal, and when they are processing the change, they test for HIGH or LOW and make the appropriate changes. Does this part of your code not act on transitions to HIGH properly?