Thanks for your suggestions everyone - I was kind of in a rush so I ended up taking the first response by @patrick-emin and adding some modifications based on further need and some of the posts I saw here afterwards.
Here is the final product that I ended up using, it could definitely be adjusted based on things I don't need - as in I'll never need to select multiple Text objects or Mtext, so that whole loop and check section is unneeded but definitely educational.
It takes the selected object, makes a new layer with the same name as the selection, moves the selection to the new layer, makes it lowercase, sets the current layer back to 0, checks to see if the existing layers are all on the allowed list, tells me otherwise, and finishes all while silencing and then restoring the cmdecho.
Thanks again for all the help everyone! Getting into lisps more and more.
(defun c:Text2Layer ( / oldcmdecho ss i ent edata txt layName )
(vl-load-com)
;; Store current command echo setting and turn it off for cleaner execution
(setq oldcmdecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(defun to-lower (s / lst)
(setq lst '())
(foreach c (vl-string->list s)
(setq lst (cons (cond
((and (>= c 65) (<= c 90)) (+ c 32)) ; convert A–Z → a–z
(c)
)
lst))
)
(vl-list->string (reverse lst))
)
(prompt "\nSelect TEXT or MTEXT to create layers from: ")
;; Only allow selection of Text or MText objects
(if (setq ss (ssget '((0 . "TEXT,MTEXT"))))
(progn
(setq i 0)
;; Loop through all selected text objects
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq edata (entget ent))
;; Extract the text string (DXF group code 1)
(setq txt (cdr (assoc 1 edata)))
;; Clean up text for valid layer name
;; Replaces illegal AutoCAD characters with an underscore
(setq layName (vl-string-translate "<>/\\\":;?*|=''," "______________" txt))
(setq layName (to-lower layName))
;; Check if the layer already exists
(if (not (tblsearch "layer" layName))
;; If it doesn't exist, make it
(command "._-layer" "_make" layName "")
)
;; Move the entity to the new layer (Modify DXF group code 8)
(setq edata (subst (cons 8 layName) (assoc 8 edata) edata))
(entmod edata)
(setq i (1+ i))
)
(setvar "CLAYER" "0")
(setq allowed (list "0" "COLUMN" layName))
(setq lst (tblnext "LAYER" T))
(setq found nil)
(while lst
(if (not (member (cdr (assoc 2 lst)) allowed))
(setq found T)
)
(setq lst (tblnext "LAYER"))
)
(if found
(prompt "\nOther layers exist.")
(prompt "\nOnly allowed layers found.")
)
(princ (strcat "\nSuccess! Processed " (itoa (sslength ss)) " text object(s)."))
)
(princ "\nNo text selected.")
)
;; Restore original command echo setting
(setvar "CMDECHO" oldcmdecho)
(princ)
)