After staring at this for a long time, we figured it out. We had a an extra blank line in the "externals" property for some of our directories. Therefore, what was happening is that CruiseControl was looping over the list of externals and finding the blank line and getting stuck on it.
Once we removed this blank line in the externals, everything worked.
