MaterialQualityLevel 0 (or 2) stalls 4.22

So the error appears to be occurring in the function FMaterialRenderProxy::EvaluateUniformExpressions in the MaterialShared.cpp.

In UE 4.20 the function contains this line:

// Create and cache the material's uniform buffer.
	OutUniformExpressionCache.UniformBuffer = UniformExpressionSet.CreateUniformBuffer(Context, CommandListIfLocalMode, &OutUniformExpressionCache.LocalUniformBuffer);

And in UE 4.22 that line has been replaced with:

const FShaderParametersMetadata& UniformBufferStruct = UniformExpressionSet.GetUniformBufferStruct();
FMemMark Mark(FMemStack::Get());
void* TempBuffer = FMemStack::Get().PushBytes(UniformBufferStruct.GetSize(), SHADER_PARAMETER_STRUCT_ALIGNMENT);
UniformExpressionSet.FillUniformBuffer(Context, TempBuffer);
if (CommandListIfLocalMode)
{
	OutUniformExpressionCache.LocalUniformBuffer = CommandListIfLocalMode->BuildLocalUniformBuffer(TempBuffer, UniformBufferStruct.GetSize(), UniformBufferStruct.GetLayout());
	check(OutUniformExpressionCache.LocalUniformBuffer.IsValid());
}
else
{
	if (IsValidRef(OutUniformExpressionCache.UniformBuffer))
	{
		check(OutUniformExpressionCache.UniformBuffer->GetLayout() == UniformBufferStruct.GetLayout());
		RHIUpdateUniformBuffer(OutUniformExpressionCache.UniformBuffer, TempBuffer);
	}
	else
	{
		OutUniformExpressionCache.UniformBuffer = RHICreateUniformBuffer(TempBuffer, UniformBufferStruct.GetLayout(), UniformBuffer_MultiFrame);
	}
}

The line check(OutUniformExpressionCache.UniformBuffer->GetLayout() == UniformBufferStruct.GetLayout()); is where the error dialogue states the error occurs. Other than the line in 4.20 being changed to the code from 4.22 the rest of the function is unchanged.
Unfortunately I am not familiar enough with UE4’s source to really understand what has been changed and why.