The following lists some projects with documentation that might be interesting if you want to learn more about the techniques involved in dynamic recompilation.
DR Emulator
This short article about the dynamically recompiling 68K emulator for PowerMacs is a good starting point as it offers a good description of the difference between an interpreter and a DynaRec. It even covers topics like self-modifying code.
The whitepaper about Syn68k, the 68K emulator used in ARDI's Executor, became something like a standard reference. It is quite good, no doubt, but hard to understand for a beginner, and the code examples presented without explanation are rather uninspiring.
Great documentation about the 3rd year project tARMac.
The document about ARMphetamine doesn't cover all the topics needed for a decent DynaRec but the most important ones at great detail.
1964 Recompiling Engine Documentation [PDF]
Information about the recompiler used in the N64 emulator 1964.
Although Generator generates binary translations only for move instructions, the documentation isn't bad and it shows how interaction between a threaded interpreter and a DynaRec can be implemented.
Shade is not an emulator but a simulator to trace code, but many of its techniques and terms were adopted for dynamic recompilation which makes it quite interesting. To understand the few code examples slight knowledge of SPARC assembly comes handy.
Embra was influenced by Shade, but simulates a MIPS machine on system-level, including MMU and cache simulation.
FX!32 [PDF]
FX!32 is likely to be one of the most successful static binary translators. This is due to the fact that new portions of an application are interpreted first and the binary translator uses gathered profiling information to generate highly optimised code for "visited" translation units. The whole task is slightly simplified by translating x86-NT binaries on an Alpha-NT platform.