In the following code, the compiler's derived type of the argument to 'namestring' in function THING1 is thought to be NULL. Consequently it emits an incorrect warning that the type is not right.  In contrast, THING2 does not admit elision of LISTIFY-REST-ARG because the arg flows somewhere other than one of the known special cases for &more, and it does *not* produce a spurious warning about a bad argument to namestring.

This is as far as I got.

(defun thing1 (&rest args)
  (if (search "xyz" (namestring (first args)))
      (apply 'something args)
      (apply 'something-else args)))

(defun thing2 (&rest args)
  (if (search "xyz" (namestring (first args)))
      (apply 'something args)
      (print args)))

; compiling file "/private/tmp/try.lisp" (written 11 NOV 2013 03:57:47 PM):
; compiling (DEFUN THING1 ...)
; file: /private/tmp/try.lisp
; in: DEFUN THING1
;     (FIRST ARGS)
; --> CAR SB-C::%REST-REF AND IF
; ==>
;   NIL
;
; caught STYLE-WARNING:
;   This is not a
;            (OR (VECTOR CHARACTER) (VECTOR NIL) BASE-STRING PATHNAME FILE-STREAM):
;     NIL
;   See also:
;     The SBCL Manual, Node "Handling of Types"

; compiling (DEFUN THING2 ...);
; compilation unit finished
;   caught 1 STYLE-WARNING condition