What doesn't work here is that you have a rectangular plane, where the opposite faces are exactly the same size and you're changing them to a perspectively distorted UV map. The camera's view also distorts the rectangluar shape of the plane, so it's double distorted.
Don't quote me on that, I'm not going for physically correct explanations... the point is, to achieve what you want to do, you don't necessarily need UV mapping, you can use the Window output of the Texture Coordinate node in the Shader Editor, or choose Window if you set the Vector in the Material Properties.
If you want to use UV mapping you need more geometry to calculate the distortion correctly, so you have to subdivide the plane as @Emir suggests in his comment. But then you have to unwrap it again to project this new geometry. If it still doesn't work, the subdivisions were not enough. The Window method I described above doesn't need additional geometry.
But here is an example to show you why it doesn't work without enough geometry or not unwrapping it again after subdividing. On the left is the plane with just four vertices. If you now subdivide it, the plane will be cut evenly subdivision is the same size, according to the original geometry. But if you don't project again from view, the UV is a 2D workspace. Each edge is not a perspective representation, so the cuts will simply divide all edges evenly according to their 2D length. Only if you unwrap it again with Project from View, the proportional subdivision will be taken into account.