Just my 46 cents, here. I have just finished completely refurbishing 2 Mac Pro (5,1 - 2010-2012) CPU trays (and am about to do a third) and have had to deal with this problem. In both cases, the original plastic rivets and springs were intact but, after reading numerous reports of failure over time, I sought a more permanent, reliable and (hopefully) elegant solution. The following approach solved the problem for less than $0.50:
1) I carefully used pliers to squeeze the barbed end of the original rivets and coaxed them through the PCB holes. Then carefully removed the springs, without ruining the barbs, and set the rivets aside for possible future emergency use (although, with the solution I arrived at, I cannot imagine when I would ever use them - "waste-not, want-not", I guess).
2) Replaced each spring-rivet with an M3-.5mm x 14mm stainless steel button-head screw and an M3-.5mm stainless steel nylon-insert locking nut, re-using the original spring. A length of 14mm is perfect; a 12mm length will compress the springs to (or past) their limits; a 16mm length will contact the CPU tray.
(NOTE: I read
this how-to article on ifixit.com in which the author used 16mm screws and had to drill a hole in the tray to accommodate the excess screw length but the excess length is just that: excess. I avoid invasive operations unless there's an excellent reason to perform them. The author also used normal cap-head screws and used washers under the screw heads to properly retain the springs; a button-head screw has a very flat, larger-diameter head that is perfect for the spring, obviating the need for washers (looks more elegant, too). Also, he used a nylon washer on the bottom of the PCB but, as tsialex pointed out, the bottom is a ground plane anyway and requires no such insulation.)
3) Cleaned and applied thermal compound to the Northbridge chip (of course).
4) Assembled, adjusting the tension to close-to-original by ensuring that the distance from the bottom of the button-head of the screw to the PCB surface was equal to that of the original spring-rivet (about 9/32") This resulted in a spring pressure that approximates that of the original quite closely.
As you can see, the fix is permanent, trouble-proof, easy to disassemble/reassemble, if necessary, and elegant. The next illustration shows the nuts under the PCB in the assembled CPU tray; as can be seen, the 14mm screw length results in full engagement of the nylon locking insert with a minimum of protruding thread and plenty of clearance between the screws and the tray itself.
Here are the parts labels with complete specs for those who may find this approach desirable:
There are, of course, many ways to solve almost any problem; this one works and works well and is very economical (the total cost of the project was $0.46).