Cascade index 0 is passed into GetViewDependentWholeSceneProjectedShadowInitializer. I think the intent of MaxShadowCascades = 1 and requesting cascade index 0 is to get a single bounding volume for the "does this primitive receive CSM shadows?" test. The problem is that GetSplitDistance with NumNearCascades = 1 returns WholeSceneDynamicShadowRadius for SplitIndex = 1 (the far edge). Far shadow cascades cover [WholeSceneDynamicShadowRadius, FarShadowDistance], which is completely outside this frustum. So any primitive that's beyond WholeSceneDynamicShadowRadius but within FarShadowDistance gets classified as a non-CSM receiver and gets the non-shadow shader.