Your code don'tdoesn't use your created texture with D3D11_CPU_ACCESS_READ.
It creates a texture:
// Create temp frame buffer(2d texture)
wrl::ComPtr<ID3D11Texture2D>pFrame = nullptr;
HRESULT hr = pDevice->CreateTexture2D(&pFrameDesc, nullptr, &pFrame);
GFX_THROW_INFO(hr);
Then it loses track ofreleases that texture and takes thea reference to one from the swapchain (which is never set for CPU READ):
hr = pSwapChain->GetBuffer(0, __uuidof(pFrame), &pFrame);
GFX_THROW_INFO(hr);
Then you try to map the swapchain buffer:
hr = pContext->Map(pFrame.Get(), 0u, D3D11_MAP_READ, 0u, &map);
GFX_THROW_INFO(hr);