One layer's runtime exception is another layer's checked (and acted upon) exception.
I can see containers e.g. servlet container; REPLs and/or anything top-level interpreter loop; etc. legitimately selecting and catching RuntimeExceptions as they are not supposed to crash simply because something goes boom deeper in the stack.
Similar to the container case, crossing adjacency boundaries e.g. crossing layers or tiers typically calls for a more articulated exception semantics.
If the 'cause' and/or message properties prove semantically insufficient to express anything beyond "hey, it broke", and the client/higher layer can act selectively, then it is arguably legitimate to sub-class RuntimeException.