I think I understand the difference between the two, and I've found a lot of resources that explain the difference between the two, but I haven't found any explanation of why you should have one or the other or both.
Here's my current thoughts. You start with test cases as a simple way to cover the detailed functional requirements, which you can do before any software is written. However, given the application, it's probably more efficient to execute a realistic test procedure that groups test cases, and explicitly states how to do that with the actual application.
Sound about right?
Follow up question: Do a lot of organizations use both? From my research, it seems like a lot of organizations stop at the test cases.
UPDATE: My definition of the terms "test case" and "test procedure" are primarily influenced by the book Systematic Software Testing.