Bandpass butterworth filter frequencies in scipy
You're probably running into numerical precision issues on the higher-order filters with sharp cutoffs. It could be a limitation of the butter function in SciPy, or it could be due to the filter structure that it's using when evaluating the frequency response. A better way of implementing high-order IIR filters is using a second-order sections (SOS) structure.

A little Googling suggests that SciPy doesn't yet support converting a filter to its SOS representation. Furthermore, there are apparently some issues with how filter parameters are handled internally that cause bad results with high-order filters. That sounds like what you're describing. These are apparently in the process of being addressed.

With that said, I came across this example that shows how you might implement an SOS structure using SciPy. I haven't tested the code at all, so there's no warranty, but it may be worth a look.