Hi all,
Any type that is not good for discrimination, but only declaration, should not be given to TYPEP (and its implementation functions).
The compiler knows not to do that but INTERPRETED-TYPECHECKFUN doesn't.  Actually the fault in my opinion is with the structure slot setter for even trying. The slot setter for a type unsuitable for discrimination should be a different stub for funcalling purposes.

(defstruct dispatch-tbl
  (fn1 nil :type (function (t t t) (values t &optional)))
  (fn2 nil :type (function (t t t t) (values t &optional))))

(defvar *my-instance* (make-dispatch-tbl
  :fn1 (lambda (a b c) (max a b c))
  :fn2 (lambda (w x y z) (+ z y x w))))

(FUNCALL #'(SETF DISPATCH-TBL-FN1) (lambda (a b c) (min a b c)) *my-instance*)

debugger invoked on a SIMPLE-ERROR:
  Function types are not a legal argument to TYPEP:
  (FUNCTION (T T T) (VALUES T &OPTIONAL))

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL::%%TYPEP #<FUNCTION (LAMBDA (A B C)) {1003DA8C9B}> #<SB-KERNEL:FUN-TYPE (FUNCTION (T T T) (VALUES T &OPTIONAL))> T)

One way in particular this manifests itself is when a TLF is FOPCOMPILABLE-P then the compiler produces a file that won't load!

/tmp/bork.lisp:
(defun something () t)
(defun foo (a b c) (or a b c))
(if (something)
    (setf (dispatch-tbl-fn1 *my-instance*) #'foo))

* (load (compile-file "/tmp/bork"))
; compiling file "/private/tmp/bork.lisp" (written 15 JUL 2013 09:04:06 PM):
; compiling (DEFUN SOMETHING ...)
; compiling (DEFUN FOO ...)
; compiling (IF (SOMETHING) ...)

; /tmp/bork.fasl written
; compilation finished in 0:00:00.006
STYLE-WARNING: redefining COMMON-LISP-USER::SOMETHING in DEFUN
STYLE-WARNING: redefining COMMON-LISP-USER::FOO in DEFUN

debugger invoked on a SIMPLE-ERROR:
  Function types are not a legal argument to TYPEP:
  (FUNCTION (T T T) (VALUES T &OPTIONAL))

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL::%%TYPEP #<FUNCTION FOO> #<SB-KERNEL:FUN-TYPE (FUNCTION (T T T) (VALUES T &OPTIONAL))> T)

So in this case, one could argue that the fault is with the compiler for thinking that the TLF is FOPCOMPILABLE-P. This very similar TLF is _not_ FOPCOMPILABLE-P, and works fine:

(if (something)
    (setf (dispatch-tbl-fn1 *my-instance*) (lambda (x y z) (or z y x))))