Marlin firmware: unload filament with G-code
There are three things to fix and one suggestion:

Change follwing lines of M109, using parameter R instead of S, because the latter is not waiting to cool down:
M109 R160 ; Wait for 160C
...
M109 R110 ; Heat hotend to 110C


The behavior of M420 will depend on type of bed leveling, saved mesh, etc. It is off topic to troubleshoot this. The printer operates 10 cm above the surface for this operation. G28 disables bed leveling. Why do you need to re-enable it? Just remove this line:
; M420 S1 - remove (or comment out)


Redefine maximum extrusion length in Configuration.h to allow for scripted long pull (G1 E-430), for example:
#define EXTRUDE_MAXLENGTH 450


Suggestion: Use relative mode for extrusion (M83) instead of absolute positioning (M82). It will simplify your code a lot. You just want to express the distance in E parameter. Then you will not have to reset position with G92 E0 every now and then (do it just once on the start). (I use this Extrusion mode also for slicing becuase it makes easier to re-start a print in case of failure).