One might argue that evaluating or loading a compiled expression inside an emacs buffer visiting a file should be as close as possible to what happens when the file is loading.
To this end what do you think about wrapping forms evaluated with slime-eval-defun and friends with
(let* ((*load-pathname* <emacs (buffer-file-name)>) (*load-truename* (and (probe-file *load-pathname*) (truename *load-pathname*)000 <expression> )
or something like it.
For example, evaluating an asdf defsystem form depends on this...
-Alan