I have been designing / building / repairing LiIon packs for Solar race cars for over 20 yrs, and so have many other race teams around the world. We have a minimum of 45, and up to 55 (in our case) blocks of cells in series,and some much more, with 5-7+ cells per block. I also design the BMS. All team packs are charged using C/Current mode.
That has been all pretty standard for the last 25+ years, the next part is where I differ slightly to other teams -
I NEVER put ANY active silicon across any pack, irrespective of how "safe" it is supposed to be. Part of that is the strict rules on transporting the packs on planes. The BMS job is to monitor all block voltages / run mean / median / averages across the pack under various loads and report any tolerance exceptions. Also to switch / terminate the C/Current value depending on SOC per block. Other teams will run a uP controlled switched protected PFET across each block, to halt voltage increase on any block that reaches preset charge points, and allow the others to "catch up".
In my experience, IF you need to "correct" block voltages more than once per 20 - 50+ times per heavy cycles, or 50 - 100+ per light duty cycles, you have either poorly matched cells or are working them out of spec. Once the BMS issues an alarm / or shuts down the pack, we use the BMS data to balance out any errant cells. As I said, some teams have up to 100 blocks in series, and would have no hope of managing a pack if they had to constantly worry about leveling blocks.
Of all the BMSs I've come across, I haven't seen any that "switch off" the block, usually always just "switch on" some bypass current. As always, YMMV