4.0 has a minor bug in AlterTableStatement, in which we compare value compatibility of dropped type with new type instead of the other way around (and order is significant here).
This results in more conversions identified as valid than should be allowed to.
The fix is a trivial one-liner.
Relatedly, we should audit all implementations of isValueCompatible() out there - at least one, BytesType - is no longer valid in 3.0+, since BytesType can no longer correctly read any complex column. And perhaps go even further, and restrict column recreation to only previously dropped type precisely, for which I have a couple arguments as well.
That said, I'd like to defer those to a different ticket.