Hi Joshua,
Thank you for asking this question - in fact, we find that this question and the difference between SCJP and OCPJP are the most common questions on OCPJP exam preparation.
In my opinion, concurrency is the topic that is toughest and takes most of the time when taking Upgrade to Java SE 7 Programmer (IZ0-805) exam.
As you may already know, IZ0-805 covers these high-level topics 1) language enhancements (such as diamond operator, try-with-resources, and switch based on strings) 2) design patterns (Singleton, Factory, DAO, ...) 3)
JDBC (such as RowSet interfaces) 4) Concurrency (mainly java.util.concurrent utlities, threadpools, fork-join, ...) 5) Localization (resource bundles, formatting for locales, ...) 6) NIO.2 (APIs such as Path, Files, WatchService, ...).
Most of these topics are knowledge-based, for example, if we write JDBC programs, it is easy to understand the semantics and answer questions in the exam. With preparation, we can handle JDBC questions with ease. Similarly, there isn't too much difficulty to understand new features in Java 7.
However, Concurrency is a tough topic and its a slippery slope, and perhaps would require most time for preparation. Still, in the exam, we believe it would be difficult to answer all the questions on this topic correctly. The API appears to be deceptively small, but there are quite a few classes and interfaces in this package. However, the main difficulty is in understanding and using them correctly. It would take considerable time to learn to use Semaphores, CyclicBarriers, Phasers, etc correctly (and I admit I have made quite a few mistakes while learning them, and there are a few mistakes in the book as well).
Another topics that require considerable preparation is design patterns.
At sub-topic level, we would recommend writing programs to get a good grip on WatchService, RowSet interfaces, etc) - it is difficult to assimilate these APIs just by reading them.