Ok, some progress on this one.
The crash only happens when the input param type is set to 'layer' rather than 'feature class'. Some of the other parameters have type 'field' obtained for the initial input param. Maybe the internal validation code is crashing when trying to list fields in a layer instead of a feature class?
So, put input param type back to 'feature class' and all is well, except the tool is a pain in the backside to use now. I have started a different thread on how to use layers as inputs.