@Ryan R from the ngspic manual:
"_When the uic parameter is not specified on the .tran control line, the DC bias_
(initial transient) solution is computed before the transient analysis. In this case,
the node voltages specified on the .ic control lines are forced to the desired initial
values during the bias solution. During transient analysis, the constraint on these
node voltages is removed. This is the preferred method since it allows Ngspice to
_compute a consistent dc solution_"
So the .IC is used to compute an initial dc operating point, then during transient analysis the node is released. If the circuit wants to pull the node to a different value it will.