Generics: Is this improper use?
I feel you on the "My reasons are more due to preference than need." comment but the inheritance from PickOrder and public new ERPListBase&lt;TPickOrderLine&gt; Lines { get; protected set; }  will confuse somebody best case and really mess things up worst case. While it may still give you that feeling of impending doom here are some suggestions to make this safer while keeping the look and feel you prefer.

Consider implementing the property like so (also for Header)

public new ERPListBase&lt;TPickOrderLine&gt; Lines {
    get {
        // note that you can't control base.Lines so some values may not be of TPickOrderLine
        return new ERPListBase&lt;TPickOrderLine&gt;(base.Lines.OfType&lt;TPickOrderLine&gt;());
    }
    protected set { base.Lines = new new ERPListBase&lt;IPickOrderLine&gt;(value.Cast&lt;IPickOrderLine&gt;()); }
}


Consider not reusing the base class and using explicit interface implementation:

public class PickOrder&lt;TPickOrderHeader, TPickOrderLine&gt; :
    IPickOrder&lt;TPickOrderHeader, TPickOrderLine&gt;
    where TPickOrderHeader : class, IPickOrderHeader, new()
    where TPickOrderLine : class, IPickOrderLine, new()
{
    public TPickOrderHeader Header { get; protected set; }

    IPickOrderHeader IPickOrder.Header { get { return Header; } }

    public ERPListBase&lt;TPickOrderLine&gt; Lines { get; protected set; }

    ERPListBase&lt;IPickOrderLine&gt; IPickOrder.Lines { get { return new ERPListBase&lt;IPickOrderLine&gt;(Lines.Cast&lt;IPickOrderLine&gt;()); } }
}


Whatever you do, avoid storing the same data twice as you may be doing (depending on use) in your current code.