This is exactly right. When ACTION_POINTS_MAX is a constant, it is evaluated at compile time, and when the compiler compiles the code, it actually changes the line
private int actionPoints = ACTION_POINTS_MAX;
to
private int actionPoints = 4;
It can do this because no matter what ACTION_POINTS_MAX becomes in the const declaration, it will be that same value for all instances of the Unit class.
A [SerializeField] variable will be unique for each instance of the Unit, so using the = to initialize the variable as it’s declared outside of the class simply won’t work.