The main issue is that the original project is unlikely to want to change its license terms in order to accept a contribution into its mainline. So, while you can legally combine code in the ways you list and redistribute the result in the resulting intersection between licenses, the original project would probably reject the submission because it changes the licensing for the whole project.
I'm pretty sure that's what was meant by "give to both but can't take code from either one." If my project starts as a GPLv2+ project and wants to remain a GPLv2+ project, it cannot accept a V2 patch, V3 patch or V3+ patch into mainline.