RMA Dispose To Stock

I have a BPM which correctly processes an * RMA Disposition To Job *. Using the same methodology, my RMA Disposition To Stock fails to update correctly. The RMA Disposition data is saved, but the Receipt record is not updated with the disposed qty.
Any ideas why the BPM code bbelow does not woek?

The same process in a customisation also works absolutely fine. I have tested on 10.2.500.11 and 10.2.200.18.

RMA Dispose To Job

/*CODE TO DISPOSE RMA RECEIPTS TO JOB*/

if (tDr["Calculated_MassRMAProcess"].ToString().Length > 0 )
{
	fRMA = tDr["Calculated_MassRMAProcess"].ToString();
	writer.WriteLine(System.DateTime.Now.ToString() + " Validate Job number for disposition " + fRMA );
	var dJob = (from ddJob in Db.JobHead where ddJob.Company == callContextClient.CurrentCompany  && ddJob.JobNum == fRMA select ddJob).FirstOrDefault();
	if (dJob != null)
	{
		 writer.WriteLine(System.DateTime.Now.ToString() + " Job exist for disposition " + fRMA );
		 Erp.Tablesets.RMADispTableset tsRD = new  Erp.Tablesets.RMADispTableset();
		 Erp.Contracts.RMADispSvcContract rd = Ice.Assemblies.ServiceRenderer.GetService<Erp.Contracts.RMADispSvcContract>(Db);
		 if(rd != null)
		 {
			tsRD = rd.GetByID(rmaNum, rmaLineNum,rmaRNum); 
			writer.WriteLine(System.DateTime.Now.ToString() + " Get new RMA disposition for the job" + fRMA );										
			rd.GetNewRMADisp(ref tsRD,rmaNum, rmaLineNum,rmaRNum);
			var ttnRD = (from ttnRD_r in tsRD.RMADisp where ttnRD_r.RowMod == "A" select  ttnRD_r).FirstOrDefault();
				if (ttnRD != null)
				{
					writer.WriteLine(System.DateTime.Now.ToString() + " Prepopulate disposition data for the job  " + fRMA );
					ttnRD["DispType"] = "INS-MTL";	
					ttnRD["JobNum"] = fRMA;
					ttnRD["InspectedBy"] = "QUAL21";
					ttnRD["DispQty"] = ttRMARcpt.ReceivedQty;
					ttnRD["EnableBin"] = true;
					ttnRD["MtlSeq"] = 0;	
					ttnRD["RequestMove"] = false;
					rd.Update(ref tsRD);
					writer.WriteLine(System.DateTime.Now.ToString() + " Disposition data updated for the job  " + fRMA );
				}
		 }								  
	}
}

RMA Dispose To Stock

 if (Convert.ToBoolean(tDr["Calculated_Dispose"]) == true)
    {
      if(!Convert.IsDBNull(tDr["RMARcpt_RMAReceipt"]))
      {
        rmaRcpt  = Convert.ToInt32(tDr["RMARcpt_RMAReceipt"]);
      }
      else
      {
        rmaRcpt  = Convert.ToInt32(tDr["Calculated_MassRMAProcess"]);
      }
	  
      pNum = Convert.ToString((tDr["RMADtl_PartNum"]));
      rmaNum = Convert.ToInt32(tDr["RMADtl_RMANum"]);
      rmaLineNum = Convert.ToInt32(tDr["RMADtl_RMALine"]);

      var tPartRev = (from ttPartR in Db.PartRev where ttPartR.Company == callContextClient.CurrentCompany  && ttPartR.Plant == callContextClient.CurrentPlant 
        && ttPartR.PartNum ==  pNum && ttPartR.Approved == true && ttPartR.Method == true orderby ttPartR.EffectiveDate descending  select ttPartR).FirstOrDefault(); // check making part exist
      if (tPartRev != null)
      {
        var ttRMARcpt =  (from ttRMARcpt_r in Db.RMARcpt where ttRMARcpt_r.Company == callContextClient.CurrentCompany  && ttRMARcpt_r.RMANum == rmaNum && 
            ttRMARcpt_r.RMALine == rmaLineNum && ttRMARcpt_r.RMAReceipt == rmaRcpt  select ttRMARcpt_r).FirstOrDefault();  // check RMAReceipt exists
        
        if (ttRMARcpt != null)
        {
			Erp.Tablesets.RMADispTableset tsRD = new  Erp.Tablesets.RMADispTableset();
			Erp.Contracts.RMADispSvcContract rd = Ice.Assemblies.ServiceRenderer.GetService<Erp.Contracts.RMADispSvcContract>(Db);

			if(rd != null)
			{
				tsRD = rd.GetByID(rmaNum, rmaLineNum,rmaRcpt);                 
				rd.GetNewRMADisp(ref tsRD,rmaNum, rmaLineNum,rmaRcpt);
				var ttnRD = (from ttnRD_r in tsRD.RMADisp where ttnRD_r.RowMod == "A" select  ttnRD_r).FirstOrDefault();
				{
				if (ttnRD != null)
				{
					string cMessage;
					whse = ttRMARcpt.WareHouseCode.ToString();
					bin = ttRMARcpt.BinNum.ToString();
					decimal dispQty = (decimal)ttRMARcpt.ReceivedQty;
					rd.ChangeDispType(ref tsRD, "INS-STK", out cMessage);
					rd.ChangeWarehouse(ref tsRD, whse, out cMessage);
					rd.ChangeBinNum(ref tsRD, bin);

					ttnRD["ToWareHouseCode"] = whse;  
					ttnRD["ToBinNum"] = bin;               
					ttnRD["DispQty"] = dispQty;
					ttnRD["DispQtyUOM"] = "EA";
					ttnRD["InspectedBy"] = "QUAL21";
					ttnRD["InspectedDate"] = DateTime.Now;
					ttnRD["RequestMove"] = false;
					ttnRD["ReasonCode"] = "";
					ttnRD["SetReassignSNAsm"] = false;
					ttnRD["EnableBin"] = true;
					ttnRD["EnableInspectedBy"] = true;
					ttnRD["RequestMoveLicense"] = true;
					ttnRD["EnableInspection"] = false;
					ttnRD["RowMod"] = "A";

					rd.Update(ref tsRD);
					Db.Validate();
					rd.Dispose();

					dspRowCount += 1;
					writer.WriteLine(System.DateTime.Now.ToString() + " Dispose Complete for " + txtRMA);
					writer.WriteLine(System.DateTime.Now.ToString() + " **** Dispose Count = " + dspRowCount.ToString() );
				} //if (ttnRD != null)

			}
            
          } // if(rd != null)     
        
        }//if (ttRMARcpt != null)
      }//if (tPartRev != null)