(lambda ()
(+ 1 1)
(define x 20))
. load is just a "normal" function, whereas define is a special form, and it has to be in the beginning of a scope, before any function calls are made.
I think of it as if Gambit internally converts defines within scopes to letrecs, like
(lambda () (define x 1) (define y 2) (+ x y)) => (lambda () (letrec ((x 1) (x 2)) (+ x y)))
Given that definition, your code above doesn't really make any sense. You could write
(lambda ()
(load "t1.scm")
(let ()
(define x 20)))
or
(lambda ()
(define x #f)
(load "t1.scm")
(set! x 20)))
depending on what you want.
/Per