Blender 4.0
Convert each mesh island to a separate instance. Then pick a random instance (using a different seed on each frame), realize it, use Mesh Boolean: Difference with two randomly rotated cubes to cut, then again convert all mesh islands to separate instances and join with existing instances. Repeat.

Converting to Instances: [read the end to see B3.6 alternatives]

Result:

- I used a torus instead of Suzanne because I was worried about Suzanne's eyes, which aren't manifold.
- I used i instead of Scene Time: Frame to make it easy to convert the simulation zone to a repeat zone.
- Since each island is an instance, moving those pieces around should be trivial:

Blender 3.6
This solution can be implemented in Blender 3.6 under a naive assumption a boolean operation has a limit to mesh islands created. At first it might seem intuitive cutting a single mesh island will create two islands, but unfortunately this is not the case:

Of course you can just consider (1), (2), (3) to be a single piece, if you don't care that now these visually 3 separate pieces will move in unison, magically glued together. Alternatively, you can replace the loop used with the chain of custom groups as I do here:
Realistically randomize Rubik's Cube
This will allow you to support up to some number of maximum pieces, which may start failing so late in the division process that you run into different problems earlier (performance), and so it might be a fair solution to the problem (well, for most geometries at least).