Rosencrantz and Guildenstern are Code
K (oK), 35 34 33 bytes

{$[8&gt;#x;.;&lt;x!4!-&amp;4#-1 0 2+-4!#x]}


Try it online!

Without input validation (for ngn's bounty), 25 24 23 bytes

{&lt;x!4!-&amp;4#-1 0 2+-4!#x}


Try it online!

Quickly learned a bit of K and, looking at the list of verbs, I thought an alternative approach (not using cut) could work here. And it worked perfectly.

How it works

{&lt;x!4!-&amp;4#-1 0 2+-4!#x}
                 -4!#x    Length divided by four (floor division)
        4#-1 0 2+         Generate lengths (x/4-1, x/4, x/4+2, x/4-1)
       &amp;                  Generate that many 0, 1, 2, 3's
    4!-                   Negate and modulo 4; effectively swap 1 and 3
 &lt;x!                      Sort the original string by above

{$[8&gt;#x;.; &lt;code&gt; ]}  Input validation
 $[8&gt;#x           ]   If the length is less than 8
        .             Dynamically generate an error
           &lt;code&gt;     Otherwise, run the main code