Projecting the control points of a Bezier curve onto the near plane by using the appropriate view matrix should yield a rational Bezier curve that is the same as what you see in the viewport.
The problem could stem from a number of issues. If it were my code, here is what I would try:
Make sure that the projection to the plane is done properly. You need to use the world to near plane perspective projection matrix, rather than just projecting the input bezier control points to the view plane. The perspective projection part of the matrix is what makes polynomial control points turn rational.
You could create a 3d polyline and project the polyline to your near plane via the perspective matrix. Your polyline points should be rational, and should exactly match what you see visually (although for a polyine, rational points don't change the rendering at all). This is a good way to check that your projection is working properly.
Make sure that your rational curve evaluation is working properly. A good way to do this is to render a rational circular arc in 2d and make sure that the output points are exactly circular. I'd do this numerically to avoid any confusion with projection/viewing.
So, there are a few different ways you can evaluate a rational Bezier curve. My favorite way is to evaluate using the simple equation, but on a homogeneous point type, but I've seen people who sum the weights separately, or who evaluate by multiplying the control points by a basis matrix. Whatever works, I guess.
Here's a good test for 2d rational curve evaluation. Let's start with an arc, centered on the origin. We'll use a degree-2 rational Bezier. The points will be stored as [xw, yw, w].
The three points are:
P0 = [ 1, 0, 1 ], P1 = [ 0.707107, 0.707107, 0.707107 ], P2 = [ 0, 1, 1 ]
where 0.707107 is actually sqrt(2)/2
If we evaluate this at t=0.5, we get P = [ 0.603553, 0.603553, 0.853553 ]
If we divide out w, then we get P = [ 0.707107, 0.707107, 1 ]
Hope that helps.. :)