It was some amount of troubleshooting, and hunting for the right settings. In the end, following things needed to be done - hope I didn't forget anything:
- manage all APs by the same instance of RouterOS - use WifiWave2 CAPsMAN,
- set authentication type to WPA2 only, disable WPA3, because Android devices have trouble roaming with WPA3, and even if they receive other BSSIDs from neighboor group and see them as ones with better signal, they won't roam-connect to these better APs/BSSIDs. My ThinkPad A485 and wife's T440p have no problem roaming with WPA3, we both have Linux if that makes a difference, but Android devices do have issues with WPA3.
- set ft=yes and ft-over-ds=yes in security profile to enable 802.11r fast BSS transitions (roaming),
- do not kick off clients with weak signal, remove such wifiwave2 access-list rule if you have one, because it makes client devices to avoid using that SSID or access point completely and results in worse wifi experience.
- RouterOS version 7.11.2 if that makes a difference.
If roaming is working correctly, then there should be now following entries about roaming in the log:
0C:C6:FD:XX:XX:XX@distant-AP-wifi-2G roamed to 0C:C6:FD:XX:XX:XX@closer-AP-wifi-5G, signal strength -66
Instead of entries about disconnection followed by immediate reconnection entries:
0C:C6:FD:XX:XX:XX@distant-AP-wifi-5G disconnected, connection lost, signal strength -92
0C:C6:FD:XX:XX:XX@closer-AP-wifi-5G connected, signal strength -75