Not cute, but it seems to do the job.
;; Joe Burke 8/22/2003
;; convert 2D or 3D polylines to lwpolylines
;; code snips by Mark Middlebrook and Vladimir Livshiz
(defun c

oly2LWPoly ( / *Error* ss pltyp i ename vrt elist crz)
(defun *Error* (Msg)
(cond
((or (not Msg)
(member Msg '("console break"
"Function cancelled"
"quit / exit abort"))))
((princ (strcat "\nError: " Msg)))
) ;cond
(setvar "plinetype" pltyp)
(setvar "cmdecho" 1)
(princ)
) ;end
;; change Z coordinate to 0 - by Mark Middlebrook
(defun zeroz (key zelist / oplist nplist)
(setq oplist (assoc key zelist)
nplist (reverse (append '(0.0) (cdr (reverse oplist)))) zelist (subst nplist oplist zelist) ) (entmod zelist)
) ;end
(setq pltyp (getvar "plinetype"))
(setvar "plinetype" 2)
(setvar "cmdecho" 0)
(if (not
(setq ss (ssget "I" (list (cons 0 "POLYLINE")))))
(progn
(princ "\nSelect polylines to convert: ")
(setq ss (ssget (list (cons 0 "POLYLINE"))))
)
) ;if
(if ss
(progn
(setq i 0)
(repeat (sslength ss)
(setq ename (ssname ss i))
(setq vrt ename)
(while (not (equal (cdr (assoc 0 (entget vrt))) "SEQEND")) (setq elist (entget (entnext vrt))) (setq crz (cadddr (assoc 10 elist))) (if (/= crz 0) (zeroz 10 elist) ) (setq vrt (cdr (assoc -1 elist))) ) (command "_explode" ename) (command "_pedit" "M" (ssget "P") "" "Y" "J" "0" "") (setq i (1+ i)) ) ) (princ "\nNo polylines selected ") ) ;if (*Error* nil) (princ)
) ;end