score:0

you'll need to add the parcel to the item returned by selectmany:

parcels
        .where(p => !p.owners.isnullorempty())
        .selectmany(p => p.owners.select(o => new { parcel = p, owner = o }))
        .orderbydescending(x => x.owner.recordingdate ?? x.owner.saledate ?? x.owner.dateentered)
        .foreach(item =>
        {
            parcel p = item.parcel;
            owner o = item.owner;
            ...
        }

score:3

make an anonymous pair to iterate over.

 foreach(var pair in parcels
    .where(p => p.owners != null)
    .selectmany(p => new { o = p.owners, p })
    .orderbydescending(x => x.o.recordingdate ?? x.o.saledate ?? x.o.dateentered)) {

    var owner = pair.o;
    var parcel = pair.p;

    // do stuff
 }
 // alternate syntax
 foreach(var pair in from p in parcels
                     where p.owners != null
                     from o in p.owners
                     orderby o.recordingdate ?? o.saledate ?? o.dateentered descending
                     select new { o, p }) {
     var owner  = pair.o;
     var parcel = pair.p;
     // do stuff
 }

Related Query

More Query from same tag