OK, I found this is a regression of
PIG-3568 (Define the semantics of POStatus.STATUS_NULL). If I drop PIG-3568 in trunk, the test passes. In shorts, the exec() in DoubleRound was never called with nulls in 0.12, whereas it is in trunk resulting in NPE.
In terms of the fix, I think we should explicitly handle NullPointerException in addition to NumberFormatException in ROUND, DoubleRound, and FloatRound. Currently, if input.get(0) returns null, Math.round() will throw NPE.
I am attaching a new patch that adds a null check before calling Math.round(). I also copied the handler for NumberFormatException from ROUND to DoubleRound and FloadRound since it was missing in those functions.