Gratuitous workarounds I feel bad for suggesting:
Record the position of new train stops. if tick > 0 go through all of them and record on_configuration_changed for existing ones, Remove the positions if one is removed (can't use entity as key, but can use entity.unit_number, don't know if you knew that or not).
https://lua-api.factorio.com/latest/events.html#on_train_changed_state
If it stops at a station position, fast-replace the train with another with a larger collision mask. When it starts moving, replace it with a smaller one. Problem: this allows only one train per station.
Other direction: Change the station so it's not vertically offset :P . Don't know if you tried it (I don't know why one would want to use big trains if tiny trains have the same cargo size - you can flat out disable the recipe and fast-replace all existing entities on_configuration_changed and cross your fingers).
If I may ask, where/how is the grid information represented? I saw "Still based on 2x2 grids. I can move it to 1x1 grids, but that divides your rail system into 4 systems that can't be connected. Also stations and signals are funky on those offset by one rails." and am interested in that.