Leading-order cause of diurnal (not semidiurnal) variations in $g$?

I believe the explanation can be found in Manual of Harmonic Analysis and Prediction of Tides :

In deriving mathematical expressions for the tide-producing forces of the moon and sun, the principal factors to be taken into consideration are the rotation of the earth, the revolution of the moon around the earth, the revolution of the earth around the sun, the inclination of the moon's orbit to the earth's equator, and the obliquity of the ecliptic.

The key here is the fact that the earth's axis is at an angle relative to the plane of the sun, and that in general the moon will not be in the same plane. Thus, there are two sets of bulges - but they will be not be symmetrical with respect to the equator. What you are seeing then is the fact that a typical point on earth (away from the equator) will be closer to one bulge than the other...

enter image description here

In this picture you can see that for a given latitude away from the equator, you will "see" more of one bulge of the tides than the other. This asymmetry is present for both the lunar and the solar tides (although to different degree, given that the moon's orbit is tilted differently). The result is a 24 hour component.

This is described very well at http://oceanmotion.org/html/background/tides-types.htm - confirming that the tides become more symmetrical when the moon is over the equator, and less so when it moves towards the tropics of Cancer or Capricorn.

Quoting from that reference:

Different types of tides occur when the moon is either north or south of the equator. Whereas semidiurnal tides are observed at the equator at all times, most locations north or south of the equator experience two unequal high tides and two unequal low tides per tidal day; this is called a mixed tide and the difference in height between successive high (or low) tides is called the diurnal inequality. When the moon is above the Tropic of Cancer or Tropic of Capricorn, the diurnal inequality is at its maximum and the tides are called tropic tides. When the moon is above or nearly above the equator, the diurnal inequality is minimum and the tides are known as equatorial tides. When the moon and its associated tidal bulges are either north or south of the equator, most points at high latitudes in theory would be impacted by one tidal bulge and would experience one high tide and one low tide per tidal day. This so-called diurnal tide has a period of 24 hrs and 50 min.

If you are interested in the math, you might want to spend the time decoding this program which implements the equations and shows good agreement with observations.

EDIT I got curious and converted the code at the link above to Python (so I could run it). Then I ran it for three different cases. The Y axis is in microgals ($1\ gal = 1\ cm/s^{2}$ - the galileo is the common unit in this field). The units on the X axis are hours - but the date is wrong (I had some trouble initially adapting the code properly - I believe these plots might correspond to January 1981, but I am not certain. The effect, however, is real.)

Latitude = 0:

enter image description here

Latitude = 20:

enter image description here

Latitude = 40:

enter image description here

It is pretty obvious that the asymmetry between the tides is a function of the latitude, just at my picture above would predict, and although there are clear discrepancies between this plot and the one in the original paper, the general shape and magnitude is the same - especially for latitude 40 (Boulder is at 40 degrees latitude). I think we have found the culprit.

POSTSCRIPT

I had some problems getting the output from my program to match the figure; but I figured it out. Here is the overlay of the data with the output of the program for May 2/3/5 1981 for latitude 40, longitude 105: enter image description here

And here is the Python code (note - I took the BASIC code and adapted it as little as possible... this is not being offered for code review, just for reference!)

"""
From the original:
    
'  TIDE-ACD.BAS
'
'       Copyright, 1993, J. L. Ahern
'
'  Calculates the acceleration due to the sun and moon at a given location,
'    for every hour, beginning at a specified hour, day, month and year.
'    Value calculated is the UPWARD pull due to the sun and moon. To use
'    as correction to measured gravity data, you would need to ADD these
'    numbers, not subtract them.  When the moon is overhead, for example
'    this program predicts a relatively large positive number, indicating
'    a large upward pull due to the moon. This would result in a DECREASE
'    in a gravity meter reading. Thus the tide value would be ADDED to
'    correct for this effect.
'
'    Based on equations presented by
'
'       Schureman, P., A manual of the harmonic analysis and prediction of
'         tides. U.S. Coast and Geodetic Survey, Spec. Pub. 98, 1924 (revised
'         in 1941 and 1958).
'
'  and collected by
'
'       Longman, I. M., Formulas for computing the tidal acceleration due to
'         the moon and the sun. J. Geophys. Res., 64, 2351-2355, 1959.
'
'  Love numbers from Stacey, Physics of the Earth.
'
'  Algorithm for computing days since 1900 seems to be correct (except for
'    for first 3 months of 1900); Excel calls Jan. 1, 1900 day 1 (not day
'    0) and then mistakenly includes a leap day in 1900, even though 1900
'    is not divisible by 400. Quattro correctly skips the leap year in
'    1900, but calls Jan. 1, 1900 day 2, apparently so it gives the same
'    results as Excel (and probably, Lotus 123)

This version adapted to Python by Floris for physics.stackexchange.com
- for illustration of the tides calculation only
Please do not rely on this code unless you check it carefully against the 
original source:

    http://gravmag.ou.edu/reduce/tide-acd.txt
    
"""
from math import sin,cos,asin,acos,atan, floor, sqrt
from numpy import arange, zeros
from datetime import date
import matplotlib.pyplot as plt

#Boulder:

lng=105
lamda = 40 # latitude
h = 160000  # elevation, cm; tides are VERY insensitive to elevation changes

plt.close()

#constants
pi = 3.1415927#
mu = 6.67E-08
m = 7.3537E+25
s = 1.993E+33
il = .08979719#
omega = .4093146162#
ml = .074804
el = .0549
cl1 = 1.495E+13
cl = 3.84402E+10
al = 6.37827E+08
# Love Numbers
h2 = .59
k2 = .27
LoveFactor = (1 + h2 - 1.5 * k2) #' w/h2=0.59 & k2=0.27, LoveFactor=1.185

# starting day of the month:
minc=[ 0,31,59,90,120,151,181,212,243,273,304,334]

g0max = 0
g0min = 0


minit = 0
timezone = 0 # offset in time vs gmt
hour = 16    # start at 4 pm in local time
day = 2      # May 2, 1981
month = 5
year = 1981
nhours = 55
hrinc = 0.5
xb = hour + timezone
xe = xb + nhours
# algorithm doesn't work for the first two months of 1900
ii=0
nn = nhours / hrinc
xx=zeros(nn)
yy=zeros(nn)
for hrgmt in arange(xb, xe, hrinc):
        dday = day + hrgmt / 24
        tl0 = hrgmt + minit / 60
        nleap = int((year - 1900) / 4)
        if (year % 4 == 0 and month < 3):
            nleap = nleap - 1

        xm = minc[month-1]
        tdays = .5 + (year - 1900) * 365 + nleap + xm + (day - 1) + tl0 / 24

        t = tdays / 36525
        n = 4.523601612 - 33.75715303 * t + .0000367488 * t * t + .0000000387 * t * t * t
        el1 = .01675104 - .0000418 * t + .000000126 * t * t
        sl = 4.720023438 + 8399.7093 * t + .0000440695 * t * t + .0000000329 * t * t * t
        pl = 5.835124721 + 71.01800935999999 * t - .0001805446 * t * t - .0000002181 * t * t * t
        hl = 4.881627934 + 628.3319508 * t + .0000052796 * t * t
        pl1 = 4.908229467 + .0300052641 * t + 7.902400000000001E-06 * t * t + .0000000581 * t * t * t
        i = acos(.9136975738000001 - .0356895353 * cos(n))
        nu = asin(.0896765581 * sin(n) / sin(i))
        L = lng * .0174532925
        tl = (15 * (tl0 - 12) - lng) * .0174532925  # magic number converts degrees to radians: 2 pi / 360
        chi = tl + hl - nu
        chi1 = tl + hl
        ll1 = hl + 2 * el1 * sin(hl - pl1)
        cosalf = cos(n) * cos(nu) + sin(n) * sin(nu) * .9173938078
        sinalf = .3979806546 * sin(n) / sin(i)
        alf = 2 * atan(sinalf / (1 + cosalf))
        xi = n - alf
        sigma = sl - xi
        ll = sigma + .1098 * sin(sl - pl) + .0037675125 * sin(2 * (sl - pl)) + .0154002735 * sin(sl - 2 * hl + pl) + .0076940028 * sin(2 * (sl - hl))
        lm = lamda * .0174532925
        costht = sin(lm) * sin(i) * sin(ll) + cos(lm) * (((cos(.5 * i)) ** 2) * cos(ll - chi) + ((sin(.5 * i)) ** 2) * cos(ll + chi))
        cosphi = sin(lm) * .3979806546 * sin(ll1) + cos(lm) * (.9586969039 * cos(ll1 - chi1) + .0413030961 * cos(ll1 + chi1))
        c = 1 / sqrt(1 + .006738 * (sin(lm) ** 2))
        rl = 6.37827E+08 * c + h
        ap = 2.60930776E-11
        ap1 = 1 / (1.495E+13 * (1 - el1 * el1))
        dl = 1 / (1 / cl + ap * el * cos(sl - pl) + ap * el * el * cos(2 * (sl - pl)) + 1.875 * ap * ml * el * cos(sl - 2 * hl + pl) + ap * ml * ml * cos(2 * (sl - hl)))
        D = 1 / (1 / cl1 + ap1 * el1 * cos(hl - pl1))
        gm = mu * m * rl * (3 * (costht ** 2) - 1) / (dl * dl * dl) + 1.5 * mu * m * rl * rl * (5 * (costht ** 3) - 3 * costht) / (dl ** 4)
        gs = mu * s * rl * (3 * (cosphi ** 2) - 1) / (D * D * D)
        g0 = (gm + gs) * LoveFactor

        xx[ii]=day+(hrgmt-timezone)/24 # back to local time - in days
        yy[ii]=-g0 # flip the sign to match diagram
        ii=ii+1

plt.plot(xx[0:ii-1],yy[0:ii-1])
plt.show()

I posted a link to a summary paper on tides in a comment yesterday. That paper is Agnew, D. C. (2007), "Earth Tides", pp. 163-195 in Treatise on Geophysics: Geodesy, T. A. Herring, ed., Elsevier. That paper contains the answer to your question.

I don't know how long that link will last, so I'll summarize some of what Agnew described. This is a summary paper; there's nothing new here. Much of this is 100 years old or older. The key work on this was done by Sir William Thomson, George Darwin (Charles's son), Doodson (google "Doodson number"), and A.E.H. Love (google "Love number", but watch out for the mis-hits.)


Suppose the Earth is some distance $R(t)$ from a gravitating body of mass $M$, measured center of mass to center of mass, and suppose the angle between the line between those two bodies and some point of interest on the surface of the Earth is $\alpha(t)$. The gravitational potential energy due to the gravitating body at that point is $V(t) = \frac{GM}{\rho(t)}$ where $\rho(t)$ is the distance between the point of interest and the gravitating body. (Note: I'm adopting the convention that potential energy is positive, which is fairly standard in treatises on the tides.) Assuming a spherical earth of radius $r$, $\rho(t)$ can be written in terms of $R$ and $\alpha$

$$V(t) = \frac{GM}{R(t)}\frac 1 {\sqrt{1+(r/R)^2-2(r/R)\cos\alpha(t)}}$$

Expanding this using Legendre polynomials yields

$$V(t) = \frac{GM}{R(t)}\sum_{n=0}^{\infty} \left(\frac r R\right)^n P_n(\cos\alpha) $$

We want to omit the $n=0$ and $n=1$ terms. The $n=0$ term can be omitted since it has no gradient (we ultimately want force), and the $n=1$ term is the potential at the center of the Earth. Thus the tide generating potential is

$$V_{\text{tide}}(t) = \frac{GM}{R(t)}\sum_{n=2}^{\infty} \left(\frac r R\right)^n P_n(\cos\alpha) $$

The next step is to re-expand this in terms of spherical harmonics. That angle $\alpha$ is a function of where the gravitating body is in space and time, how the Earth is oriented in time, and the latitude and longitude of the point.

Some spherical cow assumptions: Assume the Earth is rotating uniformly with angular velocity $\Omega$, the point in question is at 0° latitude, 0° longitude, that the body is orbiting circularly with angular velocity $\beta$ and inclination $\varepsilon$ , and that at time $t=0$ the body was at its ascending node with a longitude of ascending node equal to zero.

With a lot of work, the $n=2, m=2$ term of the spherical harmonic expansion leads to three harmonics with angular frequencies of $2\Omega$, $2\Omega-2\beta$, and $2\Omega+2\beta$. These are the semidiurnal tides. The third term is typically negligibly small. With multiple gravitating bodies, all will contribute a term to the twice per sidereal day ($2\Omega$). This is the semidiurnal lunisolar tide, also fairly small. The $2\Omega-2\beta$ term is huge. For the Moon, this is a period of 12.42 hours. For the Sun, it's exactly 12 hours.

With even more work, the $n=2, m=1$ term of the spherical harmonic expansion leads to three more harmonics with angular frequencies of $\Omega$, $\Omega-2\beta$, and $\Omega+2\beta$. The $\Omega$ term once again comprises contributions from multiple bodies. The $\Omega-2\beta$ terms are unique per body. These are the diurnal tides, and they are what you are seeing in that graph.

The picture becomes much more complex when you get rid of those spherical cow assumptions.