How to programmatically mark and then select a subset of input cells?

There is a special cell attribute called CellID. I would suggest using this instead of cell tags to avoid the problem that you mentioned with cell tags being inherited.

Here's an example of how Select can be used to retrieve a cell with a specific cell ID:

nb = CreateWindow[];

cells = <|
   "name" -> RandomInteger[10^6],
   "status" -> RandomInteger[10^6]
   |>;
NotebookWrite[nb, Cell["John Doe", "Subsection", CellID -> cells["name"]]];
NotebookWrite[nb, Cell["Employed", "Text", CellID -> cells["status"]]];

getCell[id_] := SelectFirst[Cells[nb], CurrentValue[#, "CellID"] == id &]

setContent[id_, content_] := NotebookWrite[
  getCell[id],
  Cell[content, "Text", CellID -> id]
  ]

You should now have a notebook in front of you with a name and an employment status. Example usage of setContent:

setContent[cells["status"], "It's complicated"]