Something that looks like bug. Luckily, with workaround.
Let's say, you have MS SQL 2K on Server1 (I have SP4 - didn't check it on other configurations). Steps to reproduce the bug:
1) Create table with timestamp column (or add timestamp column to existing table) and populate with some data.

CREATE TABLE TSTest (c1 INT, TS TIMESTAMP NOT NULL)
GO
INSERT INTO TSTest (c1)
SELECT TOP 100 [id]
FROM sysobjects
GO

2) From another server "Server2" with SQL2K or SQL2K5 create linked server to Server1 using the following provider:

EXEC master.dbo.sp_addlinkedserver @server = N'Server1', @srvproduct=N'OLE DB Provider for ODBC', @provider=N'MSDASQL', @provstr=N'DRIVER={SQL Server};SERVER=Server1;'
GO

Configure it to use the appropriate user (the problem is not security, so you can give it even sa).

3) Try to query the table via linked server.

SELECT TOP 10 * FROM Server1.DBA.dbo.TSTest
GO

Error message returns:
Msg 7356, Level 16, State 1, Line 1
The OLE DB provider "MSDASQL" for linked server "Server1" supplied inconsistent metadata for a column. The column "TS" (compile-time ordinal 2) of object ""DBA"."dbo"."TSTest"" was reported to have a "DBCOLUMNFLAGS_ISROWVER" of 0 at compile time and 512 at run time.

The message above is from SQL2K5. SQL 2K returns less specific message - in order to see the detailed one trace flag 7300 should be turned on. Needless to say, no DML operation had been performed on the table during the query via linked server. So timestamp column values hadn't changed.

Workaround:

1) Use another provider (not MSDASQL). In SQL2K5, Native Client (SQLNCLI) works fine though it has other problems: from time to time Distributed Transactions Coordinator unexpectedly aborts my transaction - out of the blue without any particular reason I can put my finger on. Not sure, I'll investigate it further because of (2):

2) Use OPENQUERY. It just works.

SELECT * FROM OPENQUERY(Server1, 'SELECT TOP 10 * FROM DBA.dbo.TSTest')