There can be two reasons for this behavior:
Reason #1: There is an issue where the configuration load/unload functions have code generated that disables the hardware of an EzI2Cs, I2CHW, or BootLdrI2C User Module when a configuration is loaded. The EzI2Cs, I2CHW, or BootLdrI2C User Module is generally not located in the configuration that is loaded when this problem occurs.
Workaround #1: If this issue occurs, it is recommended to place the EzI2Cs, I2CHW, or BootLdrI2C User Module in an "overlay" configuration all by itself. (An "overlay" configuration is a new one that is added to the project.) It is then recommended to load this overlay configuration with the I2C user module in it when the program execution enters main.c or main.asm. This overlay configuration should then never be unloaded, as long as the I2C user module is operating.
Reason #2: Another reason an I2C user module may stop working when a configuration is loaded, is that the loaded configuration may have a different I2C user module in it. There is only one I2C hardware resource on most PSoC 1 devices. Therefore, if one I2C user module is operating in one configuration, and then a different configuration is loaded that also has an I2C user module, and conflict will occur where two configurations both have user modules that are trying to use just one resource on the device.
Workaround #2: Do not load a configuration with an I2C user module in it, when another configuration with an operating I2C user module is already loaded. In most cases, there should be only one I2C user module is all configurations of a project in PSoC Designer.