What's the recommended way to handle naming collisions with the PK column?
Given the stated rules, shipment_id_from_vendor would be better than vendor_shipment_id (doesn't end in _id, so not expected to be a PK/FK field). 

Generally, for me, a name collision would mean that one or both names require a better definition, to clarify whey they're distinct values. Even near-collisions should be avoided: If you have a requirements date and a request date, using the names req_date and request_date is not particularly helpful; someone may be looking for the request date, see req_date, and assume that they've found what they wanted. requirements_date may be much longer to type, but it's immediately clear what it is, and no one's going to mix it up with request_date.

That said, there's no universal solution to this. I have no issue with long table and column names, if that's what's needed to make them clear; other people would insist brevity is key and make the two columns from the previous paragraph reqr_date and rqst_date.