Try something like this:
List<Result> result = beforeChange
.Join( afterChange, b => new { b.ID, b.FieldName }, a => new { a.ID, a.FieldName }, ( b, a ) => new { b, a } )
.Where( r => !object.Equals( r.b.FieldValue, r.a.FieldValue ) )
.Select( r => new Result { ID = r.b.ID, FieldName = r.b.FieldName, FieldValueBeforeChange = r.b.FieldValue, FieldValueAfterChange = r.a.FieldValue } )
.ToList( );