This is more that what you are looking for as It Is relative also to write a custom callback in a custom train loop:

  

      Medium – 7 Apr 21
  

  
    

Custom Training with Custom Callbacks 2

  Using callbacks in a custom training and evaluation loop in Keras. A Hands-On tutorial.

  
    Reading time: 5 min read
  

  

  
    
    
  

  


But also in your case if you manually populate the CallbackList

  
      

      TensorFlow
  

  
    

tf.keras.callbacks.CallbackList  |  TensorFlow Core v2.5.0 3

  Container abstracting a list of callbacks.


  

  
    
    
  

  


I think that you still need to trigger the epoch event in your custom training loop.