They really should learn to use helper tools (i.e. anything other than the compiler).
1) Valgrind is an excellent tool. It's phenomenally easy to use and it tracks down memory leaks and memory corruption perfectly.
It'll help them understand C's memory model: what it is, what you can do, and what you shouldn't do.
2) GDB + Emacs with gdb-many-windows. Or any other integrated debugger, really.
It'll help those that are to lazy to step through the code with pencil and paper.
Not really restricted to C; here's what I think they should learn:
1) How to properly write code: How to write unmaintainable code. Reading that, I found at least three crimes I was guilty of.
Seriously, we write code for other programmers. Thus, it's more important for us to write clearly than it is to write smartly.
You say your students aren't actually programmers (they're engineers). So, they shouldn't be doing tricky things, they should focus on clear coding.
2) STFW. When I started programming (I started in Pascal, than moved to C), I did it by reading books. I spent countless hours trying to figure out how to do stuff.
Later on, I found that everything I had had to figure out had already been done by many others, and at least one of them had posted it online.
Your students are engineers; they don't have as much time to devote to programming. So, the little time they have, they should spend reading other people's code and, maybe, brushing up on idioms.
All in all, C's a pretty easy language to learn. They'll have a lot more trouble writing anything longer than a few lines than they'll have learning independent notions.