Did you verify that all the components which you put into ROM are actually designed to run out of read-only memory? I'm not entirely sure that workbench.library V45 will run properly in this context. The same goes for icon.library.
Also worth checking is the order in which the components are initialized by exec (in "exec/resident.i", the "RT_PRI" field), as well as if the flags in the Resident structure are set up properly for the task (the "RT_FLAGS" field).
If you can build a 2 MByte ROM image in memory, perform the same kind of ROM tag scan which the exec cold start code does, can you verify that all components are found, have the proper priorities and the appropriate flags set?
As for the memory ranges you are using I believe that these will work correctly with the CD32 exec.
All libraries are romable, and used since a very long time into $E0 and/or $F8 : the issue is elsewhere...
Maybe the four 512 KB blocs are in a incorrect order ?
I repeat : when I build the 1 MB CD32 Kickstart 3.1 on TWO eeproms ($E0 & $F8), all is fine, the console start and run nicely...
For the 2 MB Kickstart, I begin with $A0, $B8, $E0 and then $F8. I guess the issue is here, because I use 4 blocs now and not 2 anymore...