In 3D this would have been harder, but in 2D I think you can do something slightly different since we can use color as a 3rd axis. My suggestion would be to superimpose two contour plots over each other, one for the eigenvalues where you can use lines and just pick the E=0 isoline. Then add another which uses color to indicate the relative contribution of bulk vs surface. This will fill the whole Brillouin zone, but you can see the contributions around the Fermi contour. Use FatBandstructure and project on surface and bulk, respectively, and get the weights from the query function weights().