The reason for the bad performance is you're 'climbing up' one level each time you select one of the values from the Circuit node. Try to use CROSS APPLY instead.
I'd guess it's at least 10 times faster with your data than your current code...
insert into [MiddletownData].[dbo].[RectifierData]
select
U.Circuits.value('@Name', 'nvarchar(10)') as CircuitName,
U.Circuits.value('@ProcID', 'nchar(10)') as ProcID,
U.Circuits.value('@PrgStp', 'int') as PrgStp,
U.Circuits.value('@Mode', 'int') as Mode,
U.Circuits.value('@A', 'float') as Amps,
U.Circuits.value('@StpAH', 'float') as StpAH,
U.Circuits.value('@V', 'float') as Volts,
U.Circuits.value('@StpT', 'float') as StpT,
U.Circuits.value('@RunTime', 'int') as RunTime,
U.Circuits.value('@Tick', 'nchar(4)') as Tick,
U.Circuits.value('@Pwr', 'char(5)') as Pwr,
U.Circuits.value('@TLeft', 'float') as TLeft,
U.Circuits.value('@AccumAH', 'float') as AccumAH,
U.Circuits.value('@Alarm', 'nchar(2)') as Alarm,
U.Circuits.value('@ProcStart', 'Datetime') as ProcStart,
U.Circuits.value('@ProcEnd', 'Datetime') as ProcEnd,
U.Circuits.value('@ProcFree', 'Datetime') as ProcFree,
T.Circuit.value('@Name', 'nvarchar(15)') as PrgName
from @data.nodes('Circuits/Circuit') as U(Circuits)
cross apply Circuits.nodes('Prg') T(Circuit)