I've validated approx. 20% of the code so far as either identical to the Microchip EEPROM library code (I suspect an older version due to two lines not present in the disassembly and one wider bitmask), or as making sense in context. It is therefore 100% certain that the PICs internal ICSP support silicon is functional at least for readout, and that your programmer can read the PIC. However EPROM is not immune to 'bitrot' even though it usually takes several decades for it to degrade to the point one or a few bits start to be misread so there is still a vanishingly small possibility the code *may* be corrupt due to a single location bit flip. Your odds of winning a major lottery by finding a ticket on the street are higher!
The PIC has to be a 4MHz one, as the only internal oscillator option is 4MHz, and unless forced to by supply chain issues I can't see Weller paying the premium for the 10MHz part then running it at 4MHz. Don't worry about the speed grade of the replacement, as all will do the job.
Edit: 164 (of 810) instructions checked and either commented for algorithm or determined to be fully commented library code. So far, I've groked the line frequency check immediately after powerup:
; Find period of AC line (secondary drives LINESYNC pin (GP2/INT)
; with line frequency near-squarewave).
;
find_period
movlw 0x02 ; set count for two passes of inner loop
movwf count_m26
period_iloop ; do{
clrf INTCON ; disable interrupts, clear INTF flag
waitfalling0
clrwdt
btfss INTCON, INTF
goto waitfalling0
bcf INTCON, INTF
clrf TMR0
waitfalling1
clrwdt
btfss INTCON, INTF
goto waitfalling1
bcf INTCON, INTF ; ome mains period later
movf TMR0, W
decf count_m26, F ;}
btfsc STATUS, Z ;} while (-- count_m26);
goto skip_wf ;}
movwf period_m25
goto period_iloop
skip_wf
xorwf period_m25, F ;
btfss STATUS, Z ; if not the same, repeat find_period
goto find_period ;
movwf period_m25 ; got the mains period in units of 256us
; Compare with various periods to reject line frequencies outside the
; range 48.83 Hz - 62 Hz and split between 50 Hz and 60 Hz (at 54.25 Hz).
;
movlw 0x3f ; if(period < 16.128 ms) goto find_period
subwf period_m25, W ;
btfss STATUS, C ;
goto find_period ;
;
movlw 0x48 ; if(period < 18.432 ms) goto do_60Hz
subwf period_m25, W ;
btfss STATUS, C ;
goto do_60Hz ;
;
movlw 0x50 ; if(period < 20.480 ms) goto do_50Hz
subwf period_m25, W ;
btfss STATUS, C ;
goto do_50Hz ;
;
goto find_period ; else goto find_period
; Set two values, one in mem3_f & mem_40, other in mem_34, mem_44 & mem_33
; to consts by line freqency.
do_60Hz
movlw 0x78
movwf mem_3f
movwf mem_40
movlw 0x0c
goto skip_lf
;
do_50Hz
movlw 0x64
movwf mem_3f
movwf mem_40
movlw 0x0a
;
skip_lf
movwf mem_34
movwf mem_44
movwf mem_33