TL;DR
Currently, fast entity transfer will only swap modules if you try to insert an 'upgrade' to the current modules. Change the logic to also do a swap when you are satisfying an item ghost.What?
You have an entity, such as an assembler, with a module of one type.You use the upgrade planner or a blueprint to place a ghost for swapping the module to another type. (or to downgrade the same type/quality)
When you hold the new module in your cursor and use ctrl+leftclick, it should do the swap.
Why?
Concretely, suppose you are in the pre-bot era and have a line of assemblers loaded with productivity modules.If you wanted to upgrade those modules to uncommon quality, you can just ctrl-leftclick and drag over the line of assemblers, and you can replace all of the productivity modules with uncommon productivity modules.
If you wanted to crossgrade those modules to quality modules, this interaction does not work. You have to open each assembler and replace the modules individually. This is a very tedious process if you have a lot of entities you want to swap modules for. And punctuated by periods of extra annoyance when you place the last module in a stack and the UI decides to put the old module in your cursor rather than grabbing a new module from another inventory stack.
This is frustrating. But it's understandable that in the typical case you would want to limit fast transfer to upgrades.
However, using the upgrade planner, or blueprinting the modules, signals your intention to crossgrade the modules rather than upgrade. And so, AFAIK, the motivation to prevent fast transfer from working goes away.

