I think that computer science courses should be mathematical and theory intensive, while engineering courses should be more applied.
Topics covered in a computer science curriculum should include discrete mathematics, at least single variable calculus if not multivariable calculus and differential equations, statistics, automata theory, graph theory, complexity theory, analysis of algorithms, algorithm design and implementation, and data structure design and implementation. Electives would include topics such as computational sciences (biology, physics, chemistry), machine learning, computer vision, image processing, artificial intelligence, design of programming languages, compiler design, security (cryptography as as example of an important topic), and operating systems.
Software engineering should include the same mathematical background - discrete mathematics, calculus (at least single variable), and statistics. Other courses should be requirements engineering, architecture, design, testing, process, software usability/HCI, and formal methods. An overview of computer engineering (hardware, digital logic, digital circuits, etc) and computer science (automata theory, formal languages) should be required. There should also be room for a sequence of mathematics, computer science, and or computer engineering electives as computer science is the foundation of software engineering (in the same manner that physics is the foundation of mechanical engineering) and computer engineering is relevant to anyone developing software on low-level systems such as microcontrollers. Software engineering electives should include different types of software systems - distributed, concurrent, enterprise, web, embedded, real-time, along with additional courses on specific process models and methodologies (agile, CMMI).
I have no experience with computer engineering, so I can't comment on that. I would suspect that such a program would focus on hardware, low-level programming (assembly, C, maybe C++), embedded systems, and computer architectures.
However, all programs should have room for a number of liberal arts and free electives. I feel that these, in most cases, should be used for communication, business, and social science (psychology, sociology, ethics) courses. It's important to get out of the technical world and learn about how people interact and how businesses function so that you can be more effective at work.
You might be interested in my university's Computer Science, Software Engineering, and Computer Engineering curricula. I used these and my own research into the boundaries of CS/SE/CE to answer this question.