Contourplots on discrete surfaces

You can feed this data almost as-is to ListSliceContourPlot3D,

surf = MeshRegion[vertices, Map[Polygon, tris]];
ListSliceContourPlot3D[MapThread[Append, {vertices, data}], surf]

Mathematica graphics


straightforward draw a line where each contour cuts each triangle:

conttri[tri_, v_] := Module[{s},
   s = Select[ Subsets[tri, {2}] , 
     Ordering[ Append[MinMax@data[[#]], v]] == {1, 3, 2} & ];
   Line[(Interpolation[Transpose[{data[[#]], vertices[[#]]}], 
         InterpolationOrder -> 1])[v] & /@ s]
   ];
cline[v_] := (conttri[#, v] & /@ 
   Select[tris, Ordering[ Append[MinMax@data[[#]], v]] == {1, 3, 2} &])
Show[{g1,  Graphics3D[{Hue[#], cline[#]} & /@ 
         Subdivide[Sequence @@ MinMax@data, 10]]}]

enter image description here

( g1 is the Graphics3D from the OP )