The problem is that you are using a Jython timer, when you promote it to a global it gets typed differently (you get the underlying Java thread if I recall from our experiments with it). If you use the timer provided by openHAB then it behaves as expected in all contexts and all DSL documentation remains applicable. With the import and assignment below, createTimer can be used as it is in DSL rules, with Python syntax of course.
from core.actions import ScriptExecution
# Shortcut for similarity to DSL rules
createTimer = ScriptExecution.createTimer
Side note, if your function has no arguments you don’t need to turn it into a lambda. Lambdas are only needed in cases where you must provide only a function name but need to provide arguments to that function.
# these work the same as arguments to the timer
lambda: timer1_body()
timer1_body