Then during upsert, there are two calls you should make sure work correctly for arrays:

                    if (!column.getDataType().isSizeCompatible(column.getDataType(),
                            value, byteValue,
                            precision, column.getMaxLength(), 
                            scale, column.getScale())) {
                        throw new SQLExceptionInfo.Builder(SQLExceptionCode.DATA_INCOMPATIBLE_WITH_TYPE)
                            .setColumnName(column.getName().getString()).build().buildException();
                    }
                    values[i] = column.getDataType().coerceBytes(byteValue, value, column.getDataType(),
                            precision, scale, column.getMaxLength(), column.getScale());

The isSizeCompatible can check that the declared maxLength is greater than or equal to the value's maxLength. Then the coerceBytes would potentially need to create a new PhoenixArray if the column maxLength is greater than the value's maxLength.

I think that should work.