The PIL implementation may actually be correct.
Some interpolation functions, including bicubic, are prone to "overshoot". Basically if the change in values in a small area is dramatic enough, the interpolation function can yield values outside the original range.
Take a look at the Wikipedia article on Bicubic Interpolation. There's an example image demonstrating some of the effects and references to acutance, ringing, and clipping.