My organization protects certain fields on Contacts of Record Type X from being edited, as these contacts are imported from an external system. In addition to using locked-down page layouts, we have a trigger as another layer of security--so if a user does manage to edit one of these fields on a Contact of Record Type X, we won't allow him to save the record.
We've hit a snag with Lead conversion to an existing contact. Lead conversion will not /overwrite/ fields on an existing contact, but it will populate fields that are blank on the Contact. This causes our trigger to fire and creates a bad user experience, because the user has to go back to the lead and clear the field. What we really want is to permit the lead conversion without allowing/keeping the updates.
The best solution I can think of is to alter the existing trigger to permit Lead conversion to write to these fields and then immediately roll it back to the previous (blank) value. How can I tell definitively that an update to an existing contact was caused by a Lead conversion? I know the old trick with the "2 checkboxes" Rube Goldberg machine, but that doesn't work if the contact already existed.