For multi-axis, a key thing to look at is how tool offset compensation is handled.
Not all controllers can handle it for 4/5th axis, and rely on it being done in the CAM, which means that if you need to replace a tool/change offset, then you need to re-generate the code.

I know that Dynomotion's KMotionCNC requires re-compiling from source in order to handle it for each specific setup if you want to handle offsets in the controller, and not rely on CAM to generate the required G-code. (The reason given is there are many options for multi-axis, especially since Dynomotion can support lots of weird kinematics options, they opt to make it fully customisable in code, rather than try restrict options directly in the software)

As much as I've come to like standalone controllers, as I'm sure you're aware, when it comes to mills/routers doing complex work, program size can quickly exceed what standalone controllers can store.