Q1 assume that [2] is always old value and [3] is always new value of the field in question?
A1 Yes
Q2 Also, since my need is 12 hours before hand, and I'm assuming dur is in seconds, i would need to add - 43200 to the duration calculation to get the actual fire time, right?
A2 No you will need to subtract, if you need to have 12 hours taking in to account workshift you may try to use workshift_work2abs("Mon - Fri { 8:00 am - 5:00 pm }", date, duration); not sure if this function will work with negative duration but you may give it a try ( )
Q3 If so, what happens if that new calculation winds up being in the past, like if someone sets the scheduled start date to 4 hours from now? Will the event fail or will it fire immediately?
A3 it will be canceled the same way you have possibility to cancel event in service types tab of the ticket