Comp Sci - this is the most theretical of the bunch. It covers programming and databases and the like, but a lot more of the focus is the underlying math and logic behind all that programming. So there are classes on discreet math, graph theory, language paradigms (how programming languages differ/the different classes of languages), etc. These are the people working with neural nets, AI, pattern recognition, and all those other fun research branches that are more math than programming.
Software Engineering - Computer Science with less theory. The focus is much more on real world programming and learning how to use all the tools (the different languages, algorithms, data structures, and other tools) at your disposal to create good programs. You get a lot more on good coding practices and various design and coding methodologies, and the focus is much more on learning to make a good product.
Systems Engineering - software engineering on the hardware/software link layer. While software engineering focuses on products people will use, systems engineering focuses on products hardware will use, so a lot of operating systems stuff, device driver stuff, and embedded system code.
computer engineering - computer science with an architecture bent (meaning operating systems, assembly, and the CPU/other hardware on the motherboard) and EE with a digital circuits bent. You get all the fundamental courses of each major (algorithms, data structures, circuits, communications, etc.) but instead of getting a broader picture or specializing (which is what upper level courses are supposed to be for), you're already locked into your specialty.
Granted, all of these overlap and interact greatly. Computer engineers are just as likely as computer scientists to do CPU architecture research, some great compilers are written by systems people, and a lot of the most usable languages came from working programmers. wiki picture of how the layers play together