I ran into this recently when using the i tag for icon fonts, and the solution that worked for me was putting this code:
config.protectedSource.push( /<i[\s\S]*?\>/g ); //allows beginning <i> tag
config.protectedSource.push( /<\/i[\s\S]*?\>/g ); //allows ending </i> tag
into the function in the config.js file. This:
CKEDITOR.dtd.$removeEmpty['i'] = false;
did not work for me. The solution I found came from stackoverflow.com here: http://stackoverflow.com/questions/11782236/ckeditor-removes-empty-tags.