The only time you're creating a connection is in the child update. Since no connection exists, one is created. At the end of the using block, since only one object was using the connection, it's closed. Loop around again, and the same thing happens.
Leave the code in your child alone, but change the parents data portal code to this:
using (var ctx = ContextManager<LinqDataContext>.GetManager("DBname"))
{
DataPortal.Update<ProductList>(pList);
}
This will create the connection. The ContextManager in the CHILD object will pick up that a connection already exists, and use that. It also won't close the connection because the parent still has a reference to it.
HTH
Andy