It's not best practice to have the call to ```interpolate``` duplicated, in case they drift ouf of sync. Suggest:
```
        fill_value = data.fill_value if isinstance(data, ma.MaskedArray) \
            else np.nan
        new_data = interpolate(data, sample_values, axis=sample_dim,
                               copy=False, fill_value=fill_value)
        if isinstance(data, ma.MaskedArray):
            new_data = ma.masked_equal(new_data, fill_value)
        new_cube = iris.cube.Cube(new_data)
```
Although that depends on numpy not changing the default value of ```scipy.interpolate.interpolate.interp1d```'s ```fill_value```...