Problem: CCoinsViewDB::Cursor() already handles the case where Seek(DB_COIN) finds no coin record, but could still accept an undecodable first coin key as a valid cursor position.
CCoinsViewDBCursor::Next() already invalidates the cursor for the same decode failure later in iteration, so initial cursor setup has a small correctness mismatch.
Fix: Make initial cursor setup match Next(): keep the cached key invalid unless the first key decodes successfully.
Fixes #35172, with credit to the issue author and previous attempts #35191 and #35248.