Admin UI index rebuild will rebuild a set of services, but hang indefinitely if one times out.
On further investigation, the issues were due to ActiveMQ message issues - either activemq not running properly, or the queue being in an unexpected state (i.e. queued messages from a previous operation when Opencast was not shut down cleanly).
There is a TODO in AbstractSearchIndex.java:
// TODO Add a timeout for services that are not going to respond.
but this is really the wrong place to put a timeout, as it's waiting for update and end messages. The end message is only sent when the whole index has rebuilt, so could be some time.