Run the query below. It's a copy of the query in the article with two extra columns and an ORDER BY clause. You will very likely see rows where an index name is associated with correct index usage stats, but also index usage stats from a different index for a different table in a different database (even system databases). The extra columns reveal where the other index lives. The OBJECT_NAME function, without a database_id parameter, returns the object from the current database, fooling you into thinking the index usage stats are for one table when they are for another table in another database. I have no idea how the tool knows which set of index usage stats is correct. The tool could be showing an index as unused when it's used, or it could be showing an index as used when it's unused. It depends which row (for a given object and index) the tool uses for the index usage stats.
select OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME],
I.[NAME] AS [INDEX NAME],
FROM SYS.DM_DB_INDEX_USAGE_STATS AS S
INNER JOIN SYS.INDEXES AS I
ON I.[OBJECT_ID] = S.[OBJECT_ID]
AND I.INDEX_ID = S.INDEX_ID
ORDER BY OBJECT_NAME(S.[OBJECT_ID])