To set a pixel to anything other than white or black requires a distracting and time consuming pattern of white and black flashes.
But... There exists multiple different patterns of flashes that end up with the same grey scale shade. So the logical solution seems to therefore be for neighbouring pixels to use different flash patterns such that when viewed from a distance the flashes are hidden - ie. At any point in time while the flash pattern is occurring, the average color of an area is the the target colour, even if each individual pixel isn't that shade.
Obviously in eink, pixels disrupt neighbouring pixels, and the target colour of a pixel may change during the flashing pattern. You therefore will be requiring a very complex model/optimizer to figure out how to transition every pixel from its current state towards its destination color while maintaining dithered-flicker.
Seems like a good target for a tiny per-pixel ML model - put as input a state vector representing the current visible and hidden state of the pixel and a few neighbours, together with the target color, and have the ML model output the next signal to output to the screen and the new hidden state. This could be trained with a screen in the lab with a camera pointed at it outputting random patterns for a few days. You could also have as input to the ML model the temperature and per-screen and per-pixel calibration vectors to deal with process variation, and maybe an encoding for the age of the screen if wear starts to occur. Training should be pretty quick, because on a 1 million pixel screen, every frame is a million training data points. The execution of the ML model would run great on a modest GPU in real-time as a shader - it's the perfect fit for that.
It seems this solution covers all the usecases people are wanting... Fast updates for things like mice, fast motion for films, quick updates for typing, high quality for static images, anti aliasing for static text, no blurring for moving things, etc.