Oops.
if ( itm.Database.Name.ToLower() == "master" &&
itm.Fields["myfield"] != null )
That should include checking that the field doesn't already have a value:
if ( itm.Database.Name.ToLower() == "master" &&
itm.Fields["myfield"] != null && itm.Fields["myfield"].Value != "" )