The relevant part of the spec is section 18.3.1, pg 377, table 16.
The container will throw RemoteException to a remote client, and EJBException to a local client.
So, let's call the CMT bean "beanC" and the BMT bean "beanB". beanC is calling beanB. When beanB throws a system exception, the container will throw either RemoteException or EJBException to beanC, depending on whether beanC is remote or local respectively.
If beanC is a remote client, it has no choice but to catch RemoteException because RemoteException is not a RuntimeException. Unless beanC chooses to mark its own transaction for rollback or throw a system exception of its own, beanC's transaction survives.
If beanC is a local client, it isn't forced to catch the EJBException because EJBException is a RuntimeException. Whether beanC's transaction will survive will depend on whether or not the beanC method allows a system exception (the one from beanB or something thrown within beanC) to be thrown to the container.