If the Mtext objects with 4 lines are that way only from containing 3 "hard"-return Enters, this should work:
(defun C:MT4Lto4T (/ mtss n ss)
(if (setq mtss (ssget "_X" '((1 . "*\\P*\\P*\\P*")))); containing 3 hard returns
(repeat (setq n (sslength mtss)); then
(command "_.explode" (ssname mtss (setq n (1- n))))
(setq ss (ssget "_P"))
(command
"_.chprop" (ssname ss 0) "" "_layer" "Layer1" ""
"_.chprop" (ssname ss 1) "" "_layer" "Layer2" ""
"_.chprop" (ssname ss 2) "" "_layer" "Layer3" ""
"_.chprop" (ssname ss 3) "" "_layer" "Layer4" ""
); command
); repeat
); if
(princ)
); defun
But that would do the same with any Mtext with 4 lines like that, or for that matter any with more than 3 Enters, whether or not of the characteristics you're after otherwise. So you may need to remove the "_X" and pick them yourself somehow. If they're restricted to only a certain Layer, or they're the only things using a certain text Style, etc., such things can be built in to help limit the selection.
It also doesn't account for locked Layers, but could be made to. And it will work only on ones in the current space, so if you have them in multiple spaces, something different/additional would be needed.
Kent Cooper, AIA