Follow-up...
Again, at runtime, I'm pretty sure you need to set the data source for all subreports, even if it won't have any data. I'm sure you know how to do this, but I've included the following code anyway...
RPT_MainReport orpt = new RPT_MainReport();
orpt.Database.Tables[0].SetDataSource(DtTable1);
orpt.Database.Tables[1].SetDataSource(DtTable2);
etc, etc.
ReportDocument subreport = new ReportDocument();
subreport = orpt.OpenSubreport("subreport name");
subreport.Database.Tables[0].SetDataSource(DtSubTable1);
Kevin