The error results from anti-aliasing / inaccuracy / interpolation of the UV across faces. A solution is to get each face to read from a single point in the image.
This involves a couple more steps than it should, IMO.. it should not be necessary to split the geometry to do this, seams should do the job... but still, in 2.91, they don't.
You've probably already done most of this.. starting in the flat, with a simple plane:
- Subdivide your plane with 15 cuts for 16x16 pixels, as you have.
- Edit mode, Edge, All selected, right-click menu > Edge Split
- UV Edit.. U Unwrap > Project from View (Bounds)
- With the pivot in the UV Edit window set to 2D cursor, select all, move faces so the bottom left of the map is at the bottom left of the texture, select the vertex there, and Shift S snap the cursor to it.
- Scale the map in X and Y so each face covers a pixel..
- And as above, switch pivot to 'Individual Origins', and scale the UV faces to 0.
- Back in the 3D View, AltM Merge > By Distance, weld the faces in the geometry back together.
Now the result of an extrusion or Solidify modifier will be clean.