I would do this like this if I wanted to keep bindings in a list like you.
I actually prefer to spell out local-set-key
for each command.
(defun save-before-call (f)
`(lambda()
(interactive)
(save-buffer)
(funcall #',f)))
(add-hook 'cider-mode-hook
(lambda ()
(mapc (lambda(x)(local-set-key
(kbd (car x))
(save-before-call (cdr x))))
'(("M-l" . cider-load-current-buffer)
("M-e" . cider-eval-last-expression)))))